压缩路径+更新距离
int find(int x) {
if (p[x] != x) {
int root = find(p[x]); // 递归到底
d[x] += d[p[x]]; // 从底往回,更新距离
p[x] = root; // 压缩路径
}
return p[x];
}
合并节点
d[xf] += siz[yf];
siz[yf] += siz[xf];
fa[xf] = yf;