您的位置:首页 > 其它

PKU 1611 并查集

2009-12-09 23:06 190 查看
http://acm.pku.edu.cn/JudgeOnline/problem?id=1611 题目
详细代码如下:思路很清晰.
#include <iostream>
using namespace std;
int parent[30005];//保存人编号的父亲

int Find(int i)
{
if (i!=parent[i])
parent[i]=Find(parent[i]);
return parent[i];
}

void Union(int i,int j)
{
parent[j]=i;
}

int main ()
{
int n,m,k,i,j,count,a,b;
while (cin>>n>>m)
{
if (n==0 && m==0)
break;
for (i=0;i<n;i++)//初始化父亲
parent[i]=i;
count=0;//
for (i=1;i<=m;i++)
{
cin>>k;
cin>>a;
a=Find(a);
for (j=2;j<=k;j++)
{
cin>>b;
b=Find(b);
if (a!=b)
{
Union(a,b);
}
}
}
int res=Find(0);//找出有0这个人的父亲
for (i=0;i<n;i++)
{
if (res==Find(i))
count++;
}
cout<<count<<endl;
}
return 0;
}


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