Poj 2492 A Bug's Life(带权并查集)(水)

来源:互联网 发布:医疗人工智能 杭州 编辑:程序博客网 时间:2024/06/05 05:31

这道题还是很快就写出来了,之前也做过好几道类似的题目,不过输出略坑~

#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int maxn = 2e4+5;int father[maxn],Rank[maxn],n,m;int query(int x) {    if(x != father[x]) {        int per = father[x];        father[x] = query(father[x]);        Rank[x] = (Rank[x] + Rank[per] + 2) % 2;    }    return father[x];}int main() {    int tt;    scanf("%d",&tt);    for(int k = 1;k <= tt;k++) {        scanf("%d%d",&n,&m);        for(int i = 0;i <= n;i++) {            father[i] = i;            Rank[i] = 0;        }        int x,y,flag = 1;        for(int i = 1;i <= m;i++) {            scanf("%d%d",&x,&y);            if(flag) {                int a = query(x);                int b = query(y);                if(a == b) {                    if((Rank[y] - Rank[x] + 2) % 2 == 0)                        flag = 0;                }                else {                    father[b] = a;                    Rank[b] = (Rank[x] - Rank[y] + 3) % 2;                }            }        }        if(flag)            printf("Scenario #%d:\nNo suspicious bugs found!\n\n",k); //每组输出空一行        else             printf("Scenario #%d:\nSuspicious bugs found!\n\n",k);    }    return 0;}


0 0