您的位置:首页 > 其它

poj 1611 The Suspects

2012-09-24 11:54 274 查看
点击打开链接poj 1611

思路:最简单的并查集应用

分析:在输入的时候把在同一个集合里面的元素全部合并起来,然后最后在找有几个元素和0的根节点相同即可。

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int MAXN = 30010;

int n , m;
int num[MAXN];
int father[MAXN];

void init(){
for(int i = 0 ; i <= n ; i++){
father[i] = i;
num[i] = 1;
}
}

int find(int x){
if(x != father[x])
father[x] = find(father[x]);
return father[x];
}

int main(){
int k , x;
while(scanf("%d%d" , &n , &m) && n+m){
init();
while(m--){
scanf("%d" , &k);
int root;
for(int i = 0 ; i < k ; i++){
scanf("%d" , &x);
if(i == 0)
root = find(x);
else{
int fx = find(x);
if(fx != root){
father[fx] = root;
num[root] += num[fx];
}
}
}
}
printf("%d\n" , num[find(0)]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: