记录编号 586736 评测结果 AAAAAAAAAA
题目名称 [NOI 2001]食物链 最终得分 100
用户昵称 Gravatar小金 是否通过 通过
代码语言 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;
}