【hihoCoder第十四周】无间道之并查集

就是基础的并查集。0代表合并操作,1代表查询操作。一开始以为会卡路径压缩,忐忑的交了一版裸并查集,结果AC了。数据还是很水的。

以后坚持做hiho,当额外的练习啦~

 

 1 #include <bits/stdc++.h>

 2 using namespace std;

 3 

 4 map<string, int> Hash;

 5 int Father[1000005];

 6 

 7 int getFather (int x) {

 8     if (x != Father[x]) {

 9         return getFather (Father[x]);

10     }

11     return x;

12 }

13 

14 void Union (int p, int q) {

15     int x = getFather (p);

16     int y = getFather (q);

17     if (x != y) {

18         Father[y] = x;

19     }

20 }

21 

22 int main () {

23     ios :: sync_with_stdio(false);

24     cin.tie(0);

25     int n, a, cnt = 1;

26     string x, y;

27     cin >> n;

28     for (int i = 0; i < 100005; ++ i) {

29         Father[i] = i;

30     }

31     while (n --) {

32         cin >> a >> x >> y;

33         if (a == 0) {

34             if (!Hash[x]) {

35                 Hash[x] = cnt ++;

36             }

37             if (!Hash[y]) {

38                 Hash[y] = cnt ++;

39             }

40             Union (Hash[x], Hash[y]);

41         } else {

42             if (!Hash[x]) {

43                 Hash[x] = cnt ++;

44             }

45             if (!Hash[y]) {

46                 Hash[y] = cnt ++;

47             }

48             if (getFather (Hash[x]) == getFather (Hash[y])) {

49                 cout << "yes" << endl;

50             } else {

51                 cout << "no" << endl;

52             }

53         }

54     }

55     return 0;

56 }

 

你可能感兴趣的:(code)