带权并查集模板
int f[maxn];
int val[maxn];
int find(int x){
if(f[x]!=x){
int p=f[x];
f[x]=find(f[x]);
val[x]+=val[p];
}
return f[x];
}
int merge(int x,int y,int c){
if(find(x)!=find(y)){
int fx=find(x);
int fy=find(y);
f[fx]=fy;
val[fx]+=c+val[y]-val[x];
return 1;
}else{
if(val[x]-val[y]!=c)return 0;
return 1;
}
}

浙公网安备 33010602011771号