poj union-find 1611 The Suspects
就是简单的并查集
#include<cstdio>
#include<cstring>
#include<iostream>
#include<memory.h>
#define MAXS 30005
#define MAXG 505
using namespace std;
int n, m;
int pre[MAXS];
int find(int t)
{
int a = t;
while (pre[a] != a)
a = pre[a];
return a;
}
void union_int(int a,int b)
{
int x, y;
x = find(a);
y = find(b);
if (x != y)
pre[y] = x;
}
int main()
{
//freopen("1.txt", "r", stdin);
int i, j, k, a, b, cont;
while (scanf("%d%d", &n, &m) != EOF && (n || m))
{
for (i = 0; i < n; i++)
pre[i] = i;
for (i = 0; i < m; i++)
{
scanf("%d", &k);
scanf("%d", &a);
for (j = 1; j < k; j++)
{
scanf("%d", &b);
union_int(a, b);
}
}
cont = 1;
j = find(0);
for (i = 1; i < n;i++)
if (find(i) == j)
cont++;
printf("%d\n", cont);
}
}
252K 16MS
比较高端的并查集的题 1182:食物链可以参考如下的博客:
http://blog.163.com/happyliyifan@126/blog/static/37462772201361695127793/
http://blog.csdn.net/tiantangrenjian/article/details/7085575