HDU 1232 畅通工程(并查集)

来源:互联网 发布:引用json文件 编辑:程序博客网 时间:2024/06/06 00:40
#include <iostream>using namespace std;int pre[1050];int find(int x){return pre[x]==x?x:pre[x]=find(pre[x]);}bool join(int a,int b){int fa=find(a);int fb=find(b);if(fa!=fb){pre[fb]=fa;return 1;}return 0;}int main(){int m,n;int a,b;int f1,f2;while(scanf("%d",&n)&&n){int ans=0;for(int i=1;i<=n;i++){pre[i]=i;}scanf("%d",&m);for(int i=1;i<=m;i++){scanf("%d %d",&a,&b);join(a,b);}for(int i=1;i<=n;i++){if(find(i)==i) ans++;}ans--;printf("%d\n",ans);}}/*4 21 34 33 31 21 32 35 21 23 5999 00*/


并查集的基础题~

1.寻找根结点的思想就是:如果根结点为自己就返回自己,如果根结点不为自己就向上查找,直到找到根结点是自己本身的点;

2.找到有几个不同的根结点,则把这些根结点连起来需要n-1条边,即为答案

0 0
原创粉丝点击