码迷,mamicode.com
首页 > 其他好文 > 详细

并查集 HDU1232

时间:2015-08-10 17:27:56      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

技术分享
 1 #include <iostream>
 2 #include <map>
 3 #include <cstring>
 4 #include <cstdio>
 5 
 6 using namespace std;
 7 
 8 int father[1010];
 9 int num[1010];
10 
11 int main()
12 {
13     int n,m;
14     while(cin>>n>>m)
15     {
16         int a,b;
17         for(int i=1;i<=1000;i++)
18             father[i]=i;
19         for(int i=1;i<=1000;i++)
20             num[i]=1;
21         for(int i=0;i<m;i++)
22         {
23             scanf("%d%d",&a,&b);
24             int fa=a;
25             int fb=b;
26             while(fa!=father[fa])
27             {
28                 fa=father[fa];
29             }
30             while(fb!=father[fb])
31             {
32                 fb=father[fb];
33             }
34             int tmp=a;
35             while(tmp!=fa)
36             {
37                 int l=father[tmp];
38                 father[tmp]=fa;
39                 tmp=l;
40             }
41             int tmpb=b;
42             while(tmpb!=fb)
43             {
44                 int l=father[tmpb];
45                 father[tmpb]=fb;
46                 tmpb=l;
47             }
48             if(fa!=fb)
49             {
50                 father[fb]=fa;
51                 num[fa]=num[fa]+num[fb];
52                 num[fb]=0;
53             }
54         }
55         int ans=0;
56         int tmpn=n;
57         for(int i=1;i<=n;i++)
58         {
59             if(num[i])
60             {
61                 ans++;
62                 tmpn-=num[i];
63             }
64         }
65         ans=ans+tmpn-1;
66         cout<<ans<<endl;
67     }
68     return 0;
69 }
View Code

 

并查集 HDU1232

标签:

原文地址:http://www.cnblogs.com/wsruning/p/4718308.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!