hdu 1232 经典并查集应用

来源:互联网 发布:阿里指数和淘宝指数 编辑:程序博客网 时间:2024/05/17 07:28

http://acm.hdu.edu.cn/showproblem.php?pid=1232

完全就是并查集的应用啊。。。

View Code
 1 #include<iostream> 2 const int N=1010; 3 using namespace std; 4  5 int n,m; 6 int parent[N]; 7  8 //初始化 9 void UFset(){10     for(int i=1;i<=n;i++){11         parent[i]=-1;12     }13 }14 //找根结点15 int Find(int x){16     int s;17     for(s=x;parent[s]>=0;s=parent[s]);18     //优化19     while(s!=x){20         int temp=parent[x];21         parent[x]=s;22         x=temp;23     }24     return s;25 }26 //合并27 void Union(int R1,int R2){28     int r1=Find(R1);29     int r2=Find(R2);30     int temp=parent[r1]+parent[r2];31     if(parent[r1]>parent[r2]){32         parent[r1]=r2;33         parent[r2]=temp;34     }else {35         parent[r2]=r1;36         parent[r1]=temp;37     }38 }39 40 int main(){41     while(scanf("%d%d",&n,&m)!=EOF){42         if(n==0)break;43         int x,y,ans=n-1;44         UFset();45         for(int i=1;i<=m;i++){46             scanf("%d%d",&x,&y);47             if(Find(x)!=Find(y)){48                 Union(x,y);49                 ans--;50             }51         }52         printf("%d\n",ans);53     }54     return 0;55 }

 

0 0
原创粉丝点击