题解
【基础】食物链
1 条题解
-
0
#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\n",ans); return 0; }
- 1