for(int i=1; i<=n; i++) {
if(f1[i]==i)bl[i]=++idx,p1[idx]=pe[i];
else {
int t=fd(i);
bl[i]=bl[t];
p1[bl[t]]+=pe[i];
}
}
for(int i=1; i<=n; i++) {
if(f1[i]==i)bl[i]=++idx;
}
for(int i=1; i<=n; i++) {
int t=fd(i);
bl[i]=bl[t];
p1[bl[t]]+=pe[i];
}
这两段有什么不同吗