首页 > 代码库 > POJ 1611 The Suspects(并查集)

POJ 1611 The Suspects(并查集)

 

思路:直接用并查集,最后找到 0 所在的集合,把 集合中的 人数 输出即可

#include<iostream>using namespace std;const int maxn=30000 +100;int set[maxn];int sum[maxn];int set_find(int d){	if(set[d]<0)		return d;	return set[d]=set_find(set[d]);}void join(int x,int y){	x=set_find(x);	y=set_find(y);	set[x]=y;}int main(){	int n,m;	int k;	while(cin>>n>>m)	{		if(n==0 &&m==0)			break;		memset(set,-1,sizeof(set));		memset(sum,0,sizeof(sum));		int i;		for(i=0;i<n;i++)			sum[i]=1;		while(m--)		{			cin>>k;			int a,b;			k--;			cin>>a;			while(k--)			{				cin>>b;				if(set_find(a)!=set_find(b))				{					sum[set_find(b)]=sum[set_find(b)]+sum[set_find(a)];//先求和					join(set_find(a),set_find(b));//再 合并,把 根合并 				}				a=b;			}		}		cout<<sum[set_find(0)]<<endl;	}}