标签:
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
Sample Output
4 1 1
这是一个简单并查集问题,我们给每个团中所有成员合并在一个根节点,这样如果两个团体有相同的人,那么这两个团体中所有人的根节点相同。
然后就只要查找0和其他人得根节点是否相同就可以了;
#include<cstdio> #include<cstring> using namespace std; int n,m,k,father[30010]; int find(int x) { int y,a,b; y=x; while (y!=father[y]) y=father[y]; while (x!=father[x]) { a=father[x]; father[x]=y; x=a; } return y; } void un(int x,int y) { int rx=find(x); int ry=find(y); if (rx==ry) return ; father[rx]=ry; } int main() { int a,b,i,sum; while (~scanf("%d%d",&n,&m)) { if (n==0&&m==0) break; sum=0; for (i=0;i<n;i++) father[i]=i; while (m--) { scanf("%d",&k); if (k>=1) scanf("%d",&a); k--; while (k--) { scanf("%d",&b); un(a,b); } } for (i=0;i<n;i++) { if (find(0)==find(i)) sum++; } printf("%d\n",sum); } return 0; }
标签:
原文地址:http://www.cnblogs.com/pblr/p/4680884.html