#include "testlib.h" #include using namespace std; using ll = long long; #define rep(i, a, b) for(ll i = a; i < (b); i++) struct DSU { vector par; DSU(int n) : par(n) { iota(par.begin(), par.end(), 0); } int find(int x) { if (par[x] == x) return x; return par[x] = find(par[x]); } void unite(int x, int y) { par[find(x)] = find(y); } bool same(int x, int y) { return find(x) == find(y); } int groups() { set s; for (int i = 0; i < (int)par.size(); i++) { s.insert(find(i)); } return s.size(); } }; const int min_n = 1; const int max_n = 500'000; const int min_w = -1'000'000'000; const int max_w = 1'000'000'000; int main(){ registerValidation(); int n = inf.readInt(min_n, max_n); inf.readEoln(); DSU uf(n); rep(i, 0, n-1) { cerr << i << endl; int u = inf.readInt(1, n); inf.readSpace(); int v = inf.readInt(1, n); inf.readSpace(); inf.readInt(min_w, max_w); inf.readEoln(); u--; v--; assert(!uf.same(u, v)); uf.unite(u, v); } assert(uf.groups() == 1); inf.readEof(); }