寒假刷題33:洛谷P2024 [NOI2001]食物鏈(並查集)

題目鏈接:

P2024 [NOI2001]食物鏈

題目解析:

就是用3倍的並查積的存各種動物的關係

一倍存本身,二倍存獵物,三倍存天敵

AC代碼:

#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
int fa[300005];
int n,k,ans;
int getfa(int x)
{
    if(x!=fa[x]) fa[x]=getfa(fa[x]);
    return fa[x];
}
int unity(int x,int y)
{
    int r1=getfa(fa[x]),r2=getfa(fa[y]);
    fa[r1]=r2;
}
int main()
{
    int x,y,z;
    cin>>n>>k;
    for(int i=1;i<=3*n;++i) fa[i]=i;
    for(int i=1;i<=k;++i)
    {
        cin>>z>>x>>y;
        if(x>n||y>n) {ans++; continue;}
        if(z==1)
        {
            if(getfa(x+n)==getfa(y)||getfa(x+2*n)==getfa(y))
            {
                ans++;
                continue;
            }
            unity(x,y);
            unity(x+n,y+n);
            unity(x+2*n,y+2*n);

        }
        else if(z==2)
        {
            if(x==y) {ans++; continue;}
            if(getfa(x)==getfa(y)||getfa(x+2*n)==getfa(y))
            {
                ans++;
                continue;
            }
            unity(x,y+2*n);
            unity(x+n,y);
            unity(x+2*n,y+n);
        }
    }
    cout<<ans<<endl;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章