标签:需要 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