POJ 1611 The Suspects(并查集)

题目链接

题目描述难懂。简单一句话,找和0在一个集合的。

 1 #include <stdio.h>

 2 #include <string.h>

 3 int p[30001];

 4 int find(int x)

 5 {

 6     int t,r;

 7     r = x;

 8     while(x != p[x])

 9     {

10         x = p[x];

11     }

12     while(r != x)

13     {

14         t = p[r];

15         p[r] = x;

16         r = t;

17     }

18     return x;

19 }

20 void merge(int x,int y)

21 {

22     x = find(x);

23     y = find(y);

24     if(x != y)

25     p[x] = y;

26 }

27 int main()

28 {

29     int n,m,sv,ev,str,i,j,k,num;

30     while(scanf("%d%d",&n,&m)!=EOF)

31     {

32         if(!n && !m) break;

33         for(i = 0;i <= n-1;i ++)

34         {

35             p[i] = i;

36         }

37         for(i = 1;i <= m;i ++)

38         {

39             scanf("%d",&k);

40             scanf("%d",&sv);

41             for(j = 2;j <= k;j ++)

42             {

43                 scanf("%d",&ev);

44                 merge(sv,ev);

45             }

46         }

47         str = find(0);

48         num = 0;

49         for(i = 0;i <= n-1;i ++)

50         {

51             if(str == find(i))

52             num ++;

53         }

54         printf("%d\n",num);

55     }

56     return 0;

57 }

你可能感兴趣的:(poj)