标签:
Time Limit: 1000MS | Memory Limit: 20000K | |
Total Submissions: 30522 | Accepted: 14836 |
Description
Input
Output
Sample Input
100 4 2 1 2 5 10 13 11 12 14 2 0 1 2 99 2 200 2 1 5 5 1 2 3 4 5 1 0 0 0
#include<iostream> #include<stdio.h> #define max1 30005 using namespace std; int pa[max1]; int find(int a) { while(a!=pa[a]) { pa[a]=pa[pa[a]]; a=pa[a]; } return a; } void bild(int a,int b) { int fa=find(a); int fb=find(b); if(fa!=fb) { pa[fb]=fa; } } int main() { int n,m; while((scanf("%d%d",&n,&m))&&(n+m!=0)) { for(int i=0;i<n;i++) { pa[i]=i; } for(int i=0;i<m;i++) { int p1,p2; int t; cin>>t>>p1; for(int j=0;j<t-1;j++) { cin>>p2; bild(p1,p2); } } int ans=1; for(int i=1;i<n;i++) { if(find(0)==find(i)) ans++; } cout<<ans<<endl; } return 0; }
这个我昨天写过博客了,但是今天做了一点点改动,就是根节点的设定变成任意的了,这样在最后搜索的时候要查找所有和 0 的根节点相同的节点。最后注意一点的是,0号同学也是一个人,不要忘了把他算入最后的结果里面去。
Sample Output
4 1 1
标签:
原文地址:http://www.cnblogs.com/superxuezhazha/p/5330360.html