1. 程式人生 > >hdu-1232 暢通工程---並查集

hdu-1232 暢通工程---並查集

sca turn 鏈接 -s span i++ 就是 %d 之間

題目鏈接:

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

題目大意:

中文題

解題思路:

直接並查集,判斷有多少不同的根節點,答案就是根節點的數目-1,因為還需要建的道路就是根節點之間兩兩連接即可

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 1000 + 10;
 4 int p[maxn];
 5 int n, m;
 6 set<int>s;
 7 void init()
 8 {
 9     s.clear();
10     for
(int i = 0; i < maxn; i++)p[i] = i; 11 } 12 int Find(int x) 13 { 14 return x == p[x] ? x : p[x] = Find(p[x]); 15 } 16 int main() 17 { 18 while(scanf("%d", &n) != EOF && n) 19 { 20 int x, y; 21 init(); 22 scanf("%d", &m); 23 while(m--) 24 {
25 scanf("%d%d", &x, &y); 26 p[Find(x)] = Find(y); 27 } 28 for(int i = 1; i <= n; i++) 29 { 30 s.insert(Find(i)); 31 } 32 cout<<(s.size() - 1)<<endl; 33 } 34 return 0; 35 }

hdu-1232 暢通工程---並查集