侧边栏

HDU-1232 畅通工程

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

思路:又是一道并查集,裸的并查集模板题

代码:

 1 #include<bits/stdc++.h>
 2 #define inf 0x3f3f3f3f
 3 typedef long long ll;
 4 const int M = int(1e5) * 2 + 5;
 5 using namespace std;
 6 int r[M];
 7 
 8 int f(int a)
 9 {
10     return r[a] == a ? a : f(r[a]);
11 }
12 
13 int main()
14 {
15     int n, m,a,b;
16     while (scanf("%d%d", &n, &m) && n)
17     {
18         for (int i = 0; i <= n; i++) r[i] = i;
19         for (int i = 0; i < m; i++)
20         {
21             cin >> a >> b;
22             r[f(a)] = f(b);
23         }
24         int ans = 0;
25         for (int i = 1; i <= n; i++)
26         {
27             if (r[i] == i) ans++;
28         }
29         cout << ans - 1 << endl;
30     }
31 
32     return 0;
33 }

 

posted @ 2019-03-10 00:23  晴人  阅读(382)  评论(0编辑  收藏  举报