結果
問題 | No.416 旅行会社 |
ユーザー | vjudge1 |
提出日時 | 2024-12-22 15:27:32 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 344 ms / 4,000 ms |
コード長 | 1,488 bytes |
コンパイル時間 | 2,159 ms |
コンパイル使用メモリ | 176,660 KB |
実行使用メモリ | 37,248 KB |
最終ジャッジ日時 | 2024-12-22 15:27:40 |
合計ジャッジ時間 | 6,937 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 78 ms
25,728 KB |
testcase_01 | AC | 7 ms
10,880 KB |
testcase_02 | AC | 7 ms
10,752 KB |
testcase_03 | AC | 8 ms
10,880 KB |
testcase_04 | AC | 8 ms
10,752 KB |
testcase_05 | AC | 7 ms
10,752 KB |
testcase_06 | AC | 7 ms
10,880 KB |
testcase_07 | AC | 7 ms
10,880 KB |
testcase_08 | AC | 11 ms
11,264 KB |
testcase_09 | AC | 19 ms
12,544 KB |
testcase_10 | AC | 81 ms
25,600 KB |
testcase_11 | AC | 81 ms
25,600 KB |
testcase_12 | AC | 84 ms
25,600 KB |
testcase_13 | AC | 80 ms
25,824 KB |
testcase_14 | AC | 270 ms
37,132 KB |
testcase_15 | AC | 272 ms
36,992 KB |
testcase_16 | AC | 344 ms
37,248 KB |
testcase_17 | AC | 280 ms
37,248 KB |
testcase_18 | AC | 278 ms
37,248 KB |
testcase_19 | AC | 168 ms
28,160 KB |
testcase_20 | AC | 166 ms
28,416 KB |
ソースコード
#include <bits/stdc++.h> #define endl '\n' #define sz(x) (signed)(x).size() using namespace std; void file_IO(){ freopen("evacuate.in", "r", stdin); freopen("evacuate.out", "w", stdout); } const int N = 1e5 + 10; const int M = 2e5 + 10; int n, m, q, fa[N], a[M], b[M], c[M], d[M]; int ans[N]; map<int, int> g[N]; vector<int> vec[N]; int Find(int x){ return (fa[x] == x ? x : (fa[x] = Find(fa[x]))); } void work(int x, int v){ for (auto u : vec[x]) ans[u] = v; } void merge(int x, int y, int v){ if (Find(1) == x) work(y, v); else if (Find(1) == y) work(x, v); if (sz(vec[x]) < sz(vec[y])) swap(x, y); fa[y] = x; for (auto u : vec[y]) vec[x].push_back(u); vec[y].clear(); } signed main(){ //file_IO(); ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin >> n >> m >> q; for (int i = 1; i <= m; i++) cin >> a[i] >> b[i]; for (int i = 1; i <= q; i++){ cin >> c[i] >> d[i]; g[c[i]][d[i]] = g[d[i]][c[i]] = 1; } memset(ans, 0, sizeof(ans)); for (int i = 1; i <= n; i++){ fa[i] = i; vec[i].push_back(i); } for (int i = 1, u, v; i <= m; i++){ if (g[a[i]][b[i]]) continue; u = Find(a[i]), v = Find(b[i]); if (u ^ v) merge(u, v, -1); } for (int i = q, u, v; i; i--){ u = Find(c[i]), v = Find(d[i]); if (u ^ v) merge(u, v, i); } for (int i = 2; i <= n; i++) cout << ans[i] << endl; return 0; }