标签:需要 sys not 识别 策略 sample turn 输出 while
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<stdio.h>
int fa[33000];
int bfind(int x) //找父节点
{
if(fa[x]!=x)fa[x]=bfind(fa[x]);
return fa[x];
}
void bmerge(int x,int y) //合并到最小的那个父节点
{
x=bfind(x);
y=bfind(y);
if(x<y)fa[y]=fa[x];
else fa[x]=fa[y];
}
int n,num,m;
int main()
{
while(scanf("%d%d",&n,&m)&&(n||m))
{
num=0;
for(int i=0;i<n;i++)fa[i]=i;
int k,x,y;
while(m--)
{
scanf("%d",&k);
if(k<=0)continue;
scanf("%d",&x);
if(k==1)continue;
for(int j=1;j<k;j++)
{
scanf("%d",&y);
if(bfind(x)!=bfind(y)) //如果父节点不相等就合并
{
bmerge(x,y);
}
}
}
for(int i=0;i<n;i++)if(bfind(i)==0)num++; //再找一遍,有些还没转换
printf("%d\n",num);
}
return 0;
}
找患病的,就是找父节点为0的学生。
标签:需要 sys not 识别 策略 sample turn 输出 while
原文地址:http://www.cnblogs.com/xzxj/p/6580497.html