結果

問題 No.483 マッチ並べ
ユーザー vjudge1
提出日時 2025-01-28 10:06:34
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 2,013 bytes
コンパイル時間 2,143 ms
コンパイル使用メモリ 198,056 KB
実行使用メモリ 6,824 KB
最終ジャッジ日時 2025-01-28 10:06:41
合計ジャッジ時間 5,840 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample WA * 3
other AC * 1 WA * 40 RE * 12
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 111 + 10, V = N * 4;
int n;
struct Point {
int _x1, _y1, id1, _x2, _y2, id2;
} a[N];
int idx = 0;
vector<int> pts[N][N];
vector<int> e[V];
void addedge(int u, int v) {
e[u].push_back(v);
}
int dfn[V], low[V], cur = 0;
int stk[V], tp = 0;
bool instk[V];
int scc_cnt = 0;
int id[N]; //??scc??
void dfs(int x) {
dfn[x] = low[x] = ++cur;
stk[++tp] = x;
instk[x] = true;
for (auto i: e[x])
if (!dfn[i]) {
dfs(i);
low[x] = min(low[x], low[i]);
}
else if (instk[i])
low[x] = min(low[x], dfn[i]);
if (dfn[x] == low[x]) {
scc_cnt++;
do {
id[stk[tp]] = scc_cnt;
instk[stk[tp]] = false;
} while (stk[tp--] != x);
}
}
void clear() {
idx = cur = tp = scc_cnt = 0;
for (int i = 1; i <= n * 4; i++) {
dfn[i] = low[i] = stk[i] = instk[i] = id[i] = 0;
e[i].clear();
}
for (int i = 1; i <= 100; i++)
for (int j = 1; j <= 100; j++)
pts[i][j].clear();
}
void slv() {
clear();
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i]._x1 >> a[i]._y1 >> a[i]._x2 >> a[i]._y2;
a[i].id1 = ++idx, a[i].id2 = ++idx;
pts[a[i]._x1][a[i]._y1].push_back(a[i].id1);
pts[a[i]._x2][a[i]._y2].push_back(a[i].id2);
}
for (int i = 1; i <= n; i++) {
addedge(a[i].id1, a[i].id2 + n * 2);
addedge(a[i].id2 + n * 2, a[i].id1);
addedge(a[i].id2, a[i].id1 + n * 2);
addedge(a[i].id1 + n * 2, a[i].id2);
}
for (int i = 1; i <= 100; i++)
for (int j = 1; j <= 100; j++) {
for (int a = 0; a < pts[i][j].size(); a++)
for (int b = a + 1; b < pts[i][j].size(); b++) {
addedge(pts[i][j][a] + n * 2, pts[i][j][b]);
addedge(pts[i][j][b] + n * 2, pts[i][j][a]);
}
}
for (int i = 1; i <= n * 4; i++)
if (!dfn[i])
dfs(i);
for (int i = 1; i <= n * 2; i++)
if (id[i] == id[i + n * 2]) {
puts("NO");
return ;
}
puts("YES");
}
int main() {
// freopen("match.in", "r", stdin);
// freopen("match.out", "w", stdout);
int T;
cin >> T;
while (T--)
slv();
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0