hdu-1232 暢通工程---並查集
阿新 • • 發佈:2018-04-21
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 暢通工程---並查集