[kuangbin帶你飛]專題五 並查集---A Bug's Life(種類並查集---帶權並查集)

A Bug’s Life(poj2492)

vj傳送門
在這裏插入圖片描述
在這裏插入圖片描述

題意:

有兩個性別的蟲子,問是否有(“a man is ketty”)同性戀。

思路:

轉換爲帶權並查集。
帶權並查集的模板+mod。

AC

#include <iostream>
#include <cstdio>
#define For(i,x,y) for(register int i=(x); i<=(y); i++)
using namespace std;
const int maxm=1e6+10;
const int maxn=2e3+10;
const int mod=2;
int a[maxm],b[maxm];
int f[maxn],dis[maxn];
int find(int x)
{
    if(x==f[x])return x;
    int root=find(f[x]);
    dis[x]=(dis[x]+dis[f[x]])%mod;
    return f[x]=root;
}
int main()
{
    int t,kase=0;
    scanf("%d",&t);
    while(t--)
    {
        int n,m;
        scanf("%d%d", &n,&m);
        For(i,1,n)f[i]=i,dis[i]=0;
        For(i,1,m)scanf("%d%d", &a[i],&b[i]);
        int flag=1;
        For(i,1,m)
        {
            int A=find(a[i]);
            int B=find(b[i]);
            if(A==B)
            {
                if(dis[a[i]]==dis[b[i]])
                {
                    flag=0;
                    break;
                }
            }
            else
            {
                f[A]=B;
                dis[A]=(dis[b[i]]-dis[a[i]]+1+mod)%mod;
            }
        }
        printf("Scenario #%d:\n",++kase);
        if(flag)printf("No suspicious bugs found!\n");
        else printf("Suspicious bugs found!\n");
        cout<<'\n';
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章