您的位置:首页 > 其它

poj 1611 并查集

2015-05-04 17:06 288 查看
题意:学校里有若n个学生,被分为m组,一个学生可以参加多个组,其中0号学生受到感染,求和他接触或者间接接触的人的数目

链接:点我

#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
using namespace std;

const int MAXN=30010;
int F[MAXN];
int num[MAXN];
int find(int x)
{
if(F[x]==-1)return x;
return F[x]=find(F[x]);
}
void bing(int x,int y)
{
int t1=find(x);
int t2=find(y);
if(t1!=t2)
{
F[t1]=t2;
num[t2]+=num[t1];
}
}
int main()
{
int n,m;
int a,a0;
int i,j,k;
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
#endif
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0&&m==0)  break;
for(i=0;i<n;i++)
{
F[i]=-1;
num[i]=1;
}
for(i=0;i<m;i++)
{
scanf("%d",&k);
for(j=0;j<k;j++)
{
if(j==0)
{
scanf("%d",&a0);
}
else
{
scanf("%d",&a);
bing(a,a0);
}

}
}
printf("%d\n",num[find(0)]);

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: