zoukankan      html  css  js  c++  java
  • 【带权并查集】A Bug's Life POJ

    A Bug's Life POJ - 2492

    题意:

    一种昆虫,异性之间才能配对,同性之间不能配对。现给出(n)只昆虫的(m)条配对关系,问其中有没有不合理(即同性配对)的情况。

    思路:

    虽然看起来迥异,但这题的内在逻辑和Parity game POJ - 1733是一样的……所以公式可以照搬,都是异或运算。具体推导表格可以直接看那一题的题解。

    const int maxn = 200000 + 100;
    int n, m;
    int rela[maxn], fa[maxn];
    
    int find(int x) {
        if (fa[x] == -1) return x;
        int tmp = find(fa[x]);
        rela[x] = rela[x] ^ rela[fa[x]];
        return fa[x] = tmp;
    }
    
    bool merge(int u, int v, int s) {
        int r1 = find(u);
        int r2 = find(v);
        if (r1 == r2) {
            return s == rela[u] ^ rela[v];
        }
        else {
            fa[r1] = r2;
            rela[r1] = rela[u] ^ rela[v] ^ s;
            return true;
        }
    }
    
    int main()
    {
        //ios::sync_with_stdio(false);
        int t; cin >> t; for (int kase = 1; kase <= t; kase++) {
            n = read(); m = read();
            for (int i = 1; i <= n; i++) fa[i] = -1;
            memset(rela, 0, sizeof(rela));
            int ok = 1;
            for (int i = 1; i <= m; i++) {
                int u, v;
                u = read(); v = read();
                if (!ok) continue;
                if (!merge(u, v, 1)) ok = 0;
            }
            if (kase != 1) printf("
    ");
            printf("Scenario #%d:
    ", kase);
            if (ok) printf("No suspicious bugs found!
    ");
            else printf("Suspicious bugs found!
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    android的HTTP框架之Volley
    android学习笔记五。2、其他组件
    android学习笔记四
    android学习笔记二、Activity深入学习
    android事件学习
    android之handler机制深入解析
    java线程深入学习
    K-Means
    git fetch + merge与 git pull的区别
    git分支管理
  • 原文地址:https://www.cnblogs.com/streamazure/p/13475687.html
Copyright © 2011-2022 走看看