hdu1213 How Many Tables 并查集的简单应用

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213

简单的并查集

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #define maxn 1100
 6 using namespace std;
 7 
 8 int parent[maxn];
 9 int m,n;
10 int Find(int x)
11 {
12     int s;
13     for(s=x;parent[s]>=0;s=parent[s]);
14     return s;
15 }
16 void Union(int r1,int r2)
17 {
18     int R1=Find(r1);
19     int R2=Find(r2);
20     if(R1!=R2) parent[R1]=R2;
21     return ;
22 }
23 int main()
24 {
25    int t;
26    scanf("%d",&t);
27    while(t--)
28    {
29      scanf("%d%d",&n,&m);
30      int A,B;
31      for(int i=1;i<=n;i++) parent[i]=-1;
32      for(int i=1;i<=m;i++)
33      {
34         scanf("%d%d",&A,&B);
35         Union(A,B);
36      }
37      int ans=0;
38      for(int i=1;i<=n;i++)
39         if(parent[i]==-1) ans++;
40      cout<<ans<<endl;
41    } 
42    return 0;
43 
44 }

 

posted on 2013-10-21 11:02  GyyZyp  阅读(140)  评论(0编辑  收藏  举报

导航