zoukankan      html  css  js  c++  java
  • hihoCoder#1066 无间道之并查集

    原题地址

    并查集+路径压缩

    数据量不大,没有加秩优化

    代码:

     1 #include <iostream>
     2 #include <map>
     3 #include <cstring>
     4 
     5 using namespace std;
     6 
     7 #define SIZE 100010
     8 
     9 int disjoin[SIZE];
    10 map<string, int> a2i;
    11 
    12 int find(int a) {
    13   if (!disjoin[a] || disjoin[a] == a)
    14     disjoin[a] = a;
    15   else
    16     disjoin[a] = find(disjoin[a]);
    17   return disjoin[a];
    18 }
    19 
    20 void merge(int a, int b) {
    21   disjoin[find(a)] = find(b);
    22 }
    23 
    24 bool check(int a, int b) {
    25   return find(a) == find(b);
    26 }
    27 
    28 int main() {
    29   int N;
    30   int op;
    31   string a, b;
    32   int ai, bi;
    33   int num = 0;
    34 
    35   memset(disjoin, 0, sizeof(int) * SIZE);
    36   cin >> N;
    37   while (N--) {
    38     cin >> op >> a >> b;
    39     ai = a2i[a];
    40     bi = a2i[b];
    41     if (!a2i[a])
    42       ai = a2i[a] = ++num;
    43     if (!a2i[b])
    44       bi = a2i[b] = ++num;
    45 
    46     if (op == 0)
    47       merge(ai, bi);
    48     else
    49       cout << (check(ai, bi) ? "yes" : "no") << endl;
    50   }
    51   return 0;
    52 }
  • 相关阅读:
    day 011总结
    day 010 总结
    day 10作业
    day 009总结
    day 008总结
    wireshark 解密tls消息
    js基础 数组slice
    js基础 数组splice
    js基础 Array.from
    js基础 Array.of
  • 原文地址:https://www.cnblogs.com/boring09/p/4377136.html
Copyright © 2011-2022 走看看