hdu oj 1232 并查集

来源:互联网 发布:大势至usb端口禁用软件 编辑:程序博客网 时间:2024/05/12 13:39
#include <stdio.h>#include <string.h>struct node{int data;int rank;int parent;};node Tree[1003]; void Make_set(int n){int i;for(i=1;i<=n;i++){Tree[i].data = i;Tree[i].parent = i;Tree[i].rank  = 0;}}int Find_set(int x){if(x!=Tree[x].parent){x=Find_set(Tree[x].parent);}return x;}void Union_set(int x,int y){x = Find_set(x);y = Find_set(y);if(Tree[x].rank>Tree[y].rank){Tree[y].parent = x;}else{Tree[x].parent = y;if(Tree[x].rank==Tree[y].rank){Tree[y].rank++;}}}int main(){int n,m,x,y,i;int c;int parents[1003];while (1){memset(parents,0,sizeof(parents));scanf("%d",&n);if(n==0)break;c=0;scanf("%d",&m);Make_set(n);for(i=1;i<=m;i++){scanf("%d %d",&x,&y);Union_set(x,y);}for (i=1;i<=n;i++){parents[Find_set(i)] = 1;}for (i=1;i<=n;i++){if(parents[i]!=0){c++;}}c = c>0?(c-1):c;printf("%d\n",c);}return 0;}

0 0
原创粉丝点击