标签:输入 roman put 基础 inpu rip while top problem
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; }
标签:输入 roman put 基础 inpu rip while top problem
原文地址:http://www.cnblogs.com/cxchanpin/p/6784886.html