hdu1232(跟前面某一题一样的啊)

 1 #include <stdio.h>
 2 
 3 using namespace std;
 4 
 5 int set[1005];
 6 int sum;
 7 void makeset(int n)
 8  {
 9      for(int i=1;i<=n;i++)
10      {
11          set[i]=i;
12      }
13  }
14 
15 
16  int findset(int x)//
17  {
18      if(x!=set[x])
19      {
20          set[x]=findset(set[x]);//之所以不可以直接返回是因为这里可能有多层的关系
21      }
22      return set[x];
23  }
24 
25 
26  void Union(int a,int b)//
27  {
28      int x=findset(a);
29      int y=findset(b);
30      if(x==y)
31      {
32          return ;
33      }
34      sum--;
35      set[y]=x;
36  }
37 
38 
39 int main()
40 {
41     int n,m;
42     while(1)
43     {
44         scanf("%d %d",&n,&m);
45         if(n==0) break;
46         sum=n-1;
47         makeset(n);
48         int first,second;
49         for(int i=0;i<m;i++)
50         {
51             scanf("%d %d",&first,&second);
52             Union(first,second);
53         }
54         printf("%d\n",sum);
55     }
56     return 0;
57 }

没有什么好说的,发现是这几天做的最简单的了

posted on 2012-08-12 16:30  矮人狙击手!  阅读(134)  评论(0编辑  收藏  举报

导航