链接: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 }