标签:des style blog color io os ar java for
4 2 1 3 4 3 3 3 1 2 1 3 2 3 5 2 1 2 3 5 999 0 0
1 0 2 998//并查集基础应用。 #include<stdio.h> int pre[1100]; int find(int t) { return pre[t]==t?t:pre[t]=find(pre[t]); //查找结点的根。 } int join(int x,int y) //判断两个结点的根是不是同一个根,如果不是,将它们连接在一起。 { int fx=find(x),fy=find(y); if(fx!=fy) { pre[fx]=fy; } } int main() { int i,m,n,a,b,sum; while(scanf("%d",&m),m) { for(i=1;i<=m;i++) //即对数组初始化,使得每个根节点独立成一个单独的一个结点。 { pre[i]=i; } scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d %d",&a,&b); join(a,b); } for(i=1,sum=0;i<=m;i++) //判断独立的根节点最后还剩下多少个孤立的结点。 { if(pre[i]==i) sum++; } printf("%d\n",sum-1); } return 0; }
标签:des style blog color io os ar java for
原文地址:http://blog.csdn.net/hdd871532887/article/details/40338919