結果
問題 |
No.2634 Tree Distance 3
|
ユーザー |
|
提出日時 | 2024-02-15 22:47:15 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,670 bytes |
コンパイル時間 | 8,008 ms |
コンパイル使用メモリ | 338,416 KB |
実行使用メモリ | 40,772 KB |
最終ジャッジ日時 | 2024-09-28 19:30:31 |
合計ジャッジ時間 | 18,739 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | WA * 2 |
other | WA * 69 |
ソースコード
#include <bits/stdc++.h> #include "testlib.h" using ll = long long; const ll MIN_N = 2, MAX_N = 200'000; const ll MIN_A = 0, MAX_A = 1'000'000'000; namespace ebi { struct unionfind { private: std::vector<int> par; public: unionfind(int n = 0) : par(n, -1) {} bool same(int x, int y) { return leader(x) == leader(y); } bool merge(int x, int y) { x = leader(x); y = leader(y); if (x == y) return false; if (par[x] > par[y]) std::swap(x, y); par[x] += par[y]; par[y] = x; return true; } int leader(int x) { if (par[x] < 0) return x; else return par[x] = leader(par[x]); } int size(int x) { return -par[leader(x)]; } int count_group() { int c = 0; for (int i = 0; i < int(par.size()); i++) { if (par[i] < 0) c++; } return c; } void clear() { for (int i = 0; i < int(par.size()); i++) { par[i] = -1; } } }; } // namespace ebi int main() { registerValidation(); ll n = inf.readLong(MIN_N, MAX_N); inf.readEoln(); for(int i: std::views::iota(0, n)) { inf.readLong(MIN_A, MAX_A); if(i < n-1) { inf.readSpace(); } else { inf.readEoln(); } } ebi::unionfind uf(n); for(int i_: std::views::iota(0, n-1)) { int u = inf.readLong(1ll, n) - 1; inf.readSpace(); int v = inf.readLong(1ll, n) - 1; inf.readEoln(); uf.merge(u, v); } ensure(uf.size(0) == n); inf.readEof(); return 0; }