top1编程
← 返回题目
题解

【基础】食物链

1 条题解

  • 0
    @ 2026-7-29 0:19:05
    #include<bits/stdc++.h>
    using namespace std;
    const int N=50005;
    int f[N*3];
    int n,k,ans;
    int find(int x){
        if(f[x]!=x)f[x]=find(f[x]);
        return f[x];
    }
    int main(){
        scanf("%d%d",&n,&k);
        for(int i=1;i<=n*3;i++)f[i]=i;
        while(k--){
            int d,x,y;
            scanf("%d%d%d",&d,&x,&y);
            if(x>n||y>n){
                ans++;
                continue;
            }
            if(d==2&&x==y){
                ans++;
                continue;
            }
            int x1=find(x),x2=find(x+n),x3=find(x+2*n);
            int y1=find(y),y2=find(y+n),y3=find(y+2*n);
            if(d==1){
                if(x1==y2||x1==y3){
                    ans++;
                    continue;
                }
                f[x1]=y1;
                f[x2]=y2;
                f[x3]=y3;
            }else{
                if(x1==y1||x1==y3){
                    ans++;
                    continue;
                }
                f[x1]=y2;
                f[x2]=y3;
                f[x3]=y1;
            }
        }
        printf("%d&#92;n",ans);
        return 0;
    }
    
    • 1