hdu 3172 并查集+map

/*这里将fa[]数组初始化为-1比较方便
 输入格式有点坑 看的讨论
*/

1
#include "cstdio" 2 #include "iostream" 3 #include "cstring" 4 #include "vector" 5 #include "queue" 6 #include "map" 7 #include "string" 8 #include "algorithm" 9 using namespace std; 10 11 #define MAXN 222222 12 int fa[MAXN]; 13 int T, n,num; 14 string a, b; 15 16 void init() 17 { 18 num = 1; 19 for (int i = 0; i <= MAXN; ++i) 20 fa[i] = -1; 21 } 22 23 int find(int x) 24 { 25 if (fa[x] < 0) return x; 26 return fa[x] = find(fa[x]); 27 } 28 29 void merg(int a, int b) 30 { 31 int x = find(a); 32 int y = find(b); 33 if (x < y) { 34 fa[x] += fa[y]; 35 fa[y] = x; 36 cout << -fa[x] << endl; 37 } 38 else if (x > y) { 39 fa[y] += fa[x]; 40 fa[x] = y; 41 cout << -fa[y] << endl; 42 } 43 //else cout << -fa[x] << endl; 加注释也可以过 44 } 45 void process() 46 { 47 cin >> n; 48 init(); 49 map<string, int> s; 50 for (int i = 0; i < n; ++i) { 51 cin >> a >> b; 52 if (s[a] == 0) s[a] = num++; 53 if (s[b] == 0) s[b] = num++; 54 merg(s[a], s[b]); 55 } 56 } 57 58 int main() 59 { 60 while (cin >> T) 61 while (T--) 62 process(); 63 //system("pause"); 64 return 0; 65 }
原文地址:https://www.cnblogs.com/usedrosee/p/4249065.html