結果
問題 | No.483 マッチ並べ |
ユーザー |
![]() |
提出日時 | 2025-01-28 10:03:21 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,143 bytes |
コンパイル時間 | 1,954 ms |
コンパイル使用メモリ | 196,868 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2025-01-28 10:03:44 |
合計ジャッジ時間 | 5,073 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | WA * 3 |
other | AC * 1 WA * 42 RE * 10 |
ソースコード
#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 <= 100; i++)for (int j = 1; j <= 100; j++)if (pts[i][j].size() > 4) {puts("NO");return ;}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], pts[i][j][b] + n * 2);addedge(pts[i][j][b], pts[i][j][a] + n * 2);}}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;}