hdu1232 畅通工程

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

很简单的并查集了。。。。。。。

代码:

 1 #include<cstdio>
 2 #include<cstdio>
 3 using namespace std;
 4 const int MAXN=1010;
 5 int F[MAXN];
 6 int Find(int t)
 7 {
 8     if(F[t]==-1) return t;
 9     return F[t]=Find(F[t]);
10 }    
11 void Union(int r1,int r2)
12 {
13     int R1=Find(r1);
14     int R2=Find(r2);
15     if(R1!=R2) F[R1]=R2;
16 }    
17 int main()
18 {
19     int n,m;
20 
21     while(scanf("%d",&n),n)
22     {
23         scanf("%d",&m);
24         for(int i=1;i<=n;i++) F[i]=-1;
25         int a,b;
26         while(m--)
27         {
28             scanf("%d%d",&a,&b);
29             Union(a,b);
30         }    
31         int ans=0;
32         for(int i=1;i<=n;i++)
33           if(F[i]==-1) ans++;
34         printf("%d\n",ans-1);
35     }    
36     return 0;
37 }

 

posted on 2013-10-21 13:55  GyyZyp  阅读(103)  评论(0编辑  收藏  举报

导航