记录编号 |
586736 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOI 2001]食物链 |
最终得分 |
100 |
用户昵称 |
小金 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.206 s |
提交时间 |
2024-02-25 21:57:37 |
内存使用 |
5.69 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=50010;
int f[maxn*3],k,n,ans=0;//1-self,2-eat,3-enemy
int find(int x)
{
if(x==f[x])
{
return x;
}
return f[x]=find(f[x]);
}
int main()
{
freopen("eat.in","r",stdin);
freopen("eat.out","w",stdout);
cin>>n>>k;
for(int i=1;i<=3*n;i++)
{
f[i]=i;
}
for(int i=1;i<=k;i++)
{
int d,a,b;
cin>>d>>a>>b;
if(d==1)
{
if(find(a+n)==find(b))
{
ans++;
continue;
}
if(find(a)==find(b+n))
{
ans++;
continue;
}
if(a>n||b>n)
{
ans++;
continue;
}
f[find(a)]=find(b);
f[find(a+n)]=find(b+n);
f[find(a+2*n)]=find(b+2*n);
}
else
{
if(find(a)==find(b))
{
ans++;
continue;
}
if(find(a)==find(b+n))
{
ans++;
continue;
}
if(a>n||b>n)
{
ans++;
continue;
}
if(a==b)
{
ans++;
continue;
}
f[find(a+n)]=find(b);
f[find(a)]=find(b+2*n);
f[find(a+2*n)]=find(b+n);
}
}
cout<<ans;
return 0;
}