食物链
题目链接:食物链
题目描述
解题思路
我们可以把天敌、猎物都放到同一个并查集中,用
x
+
n
x+n
x+n 表示天敌 、
x
+
2
n
x+2n
x+2n 表示猎物。
然后并查集即可。
code
#include<iostream>
#include<cstdio>
using namespace std;
int n,k,ans;
int fa[150010];
int fd(int now)
{
if(fa[now]==now)
return now;
return fa[now]=fd(fa[now]);
}
int main()
{
cin>>n>>k;
for(int i=1;i<=3*n;i++)
fa[i]=i;
while(k--)
{
int z,x,y;
scanf("%d%d%d",&z,&x,&y);
if(x>n||y>n)
{
ans++;
continue;
}
int fx=fd(x),fy=fd(y);
int dx=fd(x+n),dy=fd(y+n);
int lx=fd(x+2*n),ly=fd(y+2*n);
if(z==1)
{
if(dx==fy||dy==fx)
{
ans++;
continue;
}
fa[fy]=fx;
fa[dy]=dx;
fa[ly]=lx;
}
else
{
if(fx==fy||dx==fy)
{
ans++;
continue;
}
fa[fx]=dy;
fa[dx]=ly;
fa[lx]=fy;
}
}
cout<<ans<<endl;
}