hdu1213简单并差集
第一次做并差集,算是留个纪念吧~~
View Code
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 using namespace std; 6 const int MAXN = 1010; 7 int M, N; 8 int parent[MAXN]; 9 10 int myfind(int i) { 11 int r = i; 12 while (parent[r] != r) { 13 r = parent[r]; 14 } 15 return r; 16 } 17 18 inline void merge(int a, int b) { 19 if (a < b) { 20 parent[b] = a; 21 } else { 22 parent[a] = b; 23 } 24 } 25 26 int main() { 27 int T, a, b, ans; 28 scanf("%d", &T); 29 while (T--) 30 { 31 scanf("%d%d", &N, &M); 32 for (int i = 1; i <= N; i++) 33 { 34 parent[i] = i; 35 } 36 for (int i = 0; i < M; i++) 37 { 38 scanf("%d%d", &a, &b); 39 merge(myfind(a), myfind(b)); 40 } 41 ans = 0; 42 for (int i = 1; i <= N; i++) 43 { 44 if (parent[i] == i) 45 { 46 ans++; 47 } 48 } 49 printf("%d\n", ans); 50 } 51 return 0; 52 }

浙公网安备 33010602011771号