标签:
| Time Limit: 1000MS | Memory Limit: 20000K | |
| Total Submissions: 33160 | Accepted: 16080 |
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
#include<iostream>
#include<cstdio>
int pre[30050];
void init(int n)
{
for(int i=0;i<n;i++)
pre[i]=i;
}
int find(int x)
{
if(x==pre[x]) return x;
int temp=find(pre[x]);
pre[x]=temp;
return temp;
}
void Union(int u,int v)
{
int p=find(u);
int q=find(v);
if(p!=q)
pre[p]=q;
}
int main()
{
int n,m;
while(~scanf("%d %d",&n,&m)&&(n||m))
{
init(n);
int a,b,c,d;
int x;
while(m--)
{
scanf("%d",&x);
if(x==1) {scanf("%d",&b);continue;}
else
{
scanf("%d",&a);
x--;
while(x--)
{
scanf("%d",&b);
Union(a,b);
a=b;
}
}
}
int cnt=0;
int t=find(0);
for(int i=0;i<n;i++)
{
if(find(i)==t) cnt++; //期初wa是因为这里、、这种路径压缩的写法可能造成不用find函数无法完成对树的非根节点的根节点的更新
}
printf("%d\n",cnt);
}
return 0;
}
题目大意是说n个人,m组,只要一个组中一个人得了sars,一个组中其他人也被怀疑、并查集不解释,默认编号为0的人得了sars
标签:
原文地址:http://www.cnblogs.com/hellohacker/p/5723177.html