using lnt = long long; /* */ struct WeightedUnionFind { std::vector par,size; std::vector weight; WeightedUnionFind(int n) : par(n),size(n,1),weight(n,0) { std::iota(par.begin(),par.end(),0); } int find(int i) { if(par[i]==i) return i; int x=find(par[i]); weight[i]+=weight[par[i]]; return par[i]=x; } int unite(int i, int j, lnt w) { if(same(i,j)) { if(diff(i,j)!=w) { return 1; } return 0; } int x=find(i), y=find(j); if(size[x] */