您的位置:首页 > 其它

并查集-poj-1611-The Suspectst

2016-03-10 19:44 429 查看
题目的意思是有0到n个人,0号感染病毒,数据有m组每组的人只要有一个就所有人都会被感染。问一共有几个人被感染。

简单的并查集,fa表示种类,num表示该种类的个数,不包括父节点,找的时候只要找到根就好。

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int fa[33333];
int num[33333];
int find_fa(int n) {
return fa
==n?n:find_fa(fa
);
}
void inti(int n) {
for(int i=0;i<=n;i++) {
fa[i]=i;
num[i]=1;
}
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)&&(m+n)!=0) {
inti(n);
int x,a;
for(int i=1;i<=m;i++) {
scanf("%d",&x);
scanf("%d",&a);
int fx=find_fa(a);
int tt;
for(int j=2;j<=x;j++) {
scanf("%d",&tt);
int fy=find_fa(tt);
if(fx!=fy) {
fa[fy]=fx;
num[fx]+=num[fy];
}
}
}
int sss=find_fa(fa[0]);
cout << num[sss] << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: