就是并查集维护连通分量,找到祖先节点(即根节点),我的代码不好的地方,在于路径压缩后的距离更新没写好,应该可以采取后序遍历的方法写距离的更新,代码如下:
int find(int v){
if(v != father[v]){
int u = find(father[v]);
dis[v] += dis[father[v]];
return father[v] = u;
}
else
return v;
}
然后,后面的每次查询,都执行一次find后,输出结果就好......