记录编号 |
586729 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOI 2001]食物链 |
最终得分 |
100 |
用户昵称 |
超人 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.187 s |
提交时间 |
2024-02-25 19:29:36 |
内存使用 |
10.64 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#include<bits/stdc++.h>
using namespace std;
const int M=1e6;
int n,m,ans=0;
int eatA[M],eatB[M];
int income(int x)
{
if(eatA[x]==x) return x;
int f=eatA[x];
eatA[x]=income(eatA[x]);
eatB[x]=(eatB[x]+eatB[f])%3;
return eatA[x];
}
bool upcome(int N,int O,int I)
{
int a=income(O),b=income(I);
if(a==b)
{
if(N==1)
{
if(eatB[O]!=eatB[I]) return false;
}
if(N==2)
{
if(eatB[O]==1 && eatB[I]!=0) return false;
if(eatB[O]==2 && eatB[I]!=1) return false;
if(eatB[O]==0 && eatB[I]!=2) return false;
}
return true;
}
else
{
eatA[a]=b;
if(N==2) eatB[a]=(eatB[I]-eatB[O]+3+1)%3;
if(N==1) eatB[a]=(eatB[I]-eatB[O]+3)%3;
a=income(O);
b=income(I);
return true;
}
}
int main()
{
freopen("eat.in","r",stdin);
freopen("eat.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++) eatA[i]=i;
for(int i=1;i<=m;i++)
{
int N,O,I;
cin>>N>>O>>I;
if(O>n || I>n) ans++;
else if(N==2 && O==I) ans++;
else if(upcome(N,O,I)) continue;
else ans++;
}
cout<<ans<<endl;
return 0;
}