biying

导航

hdu1213简单并差集

  第一次做并差集,算是留个纪念吧~~

View Code
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 using namespace std;
 6 const int MAXN = 1010;
 7 int M, N;
 8 int parent[MAXN];
 9 
10 int myfind(int i) {
11     int r = i;
12     while (parent[r] != r) {
13         r = parent[r];
14     }
15     return r;
16 }
17 
18 inline void merge(int a, int b) {
19     if (a < b) {
20         parent[b] = a;
21     } else {
22         parent[a] = b;
23     }
24 }
25 
26 int main() {
27     int T, a, b, ans;
28     scanf("%d", &T);
29     while (T--)
30     {
31         scanf("%d%d", &N, &M);
32         for (int i = 1; i <= N; i++)
33         {
34             parent[i] = i;
35         }
36         for (int i = 0; i < M; i++)
37         {
38             scanf("%d%d", &a, &b);
39             merge(myfind(a), myfind(b));
40         }
41         ans = 0;
42         for (int i = 1; i <= N; i++)
43         {
44             if (parent[i] == i)
45             {
46                 ans++;
47             }
48         }
49         printf("%d\n", ans);
50     }
51     return 0;
52 }

 

posted on 2013-04-18 21:02  biying  阅读(147)  评论(0)    收藏  举报