1 条题解

  • 0
    @ 2024-12-27 19:56:16
    #include<bits/stdc++.h>
    using namespace std;
    const int N=50010;
    int f[N],d[N],n,k,cnt;
     
    int find(int x)
    {
        if(f[x]!=x)
        {
            int tmp=find(f[x]);
            d[x]+=d[f[x]];
            f[x]=tmp;
        }
        return f[x];
    }
     
    int main()
    {
        scanf("%d%d",&n,&k);
        for(int i=1;i<=n;i++) f[i]=i;
        while(k--)
        {
            int op,a,b;
            scanf("%d%d%d",&op,&a,&b);
            if(a>n or b>n or op==2 and a==b)
            {
                cnt++;
                continue;
            }
            int fa=find(a);
            int fb=find(b);
            if(fa==fb)
            {
                if(op==1 and (d[a]-d[b])%3!=0 or op==2 and (d[a]-d[b]-1)%3!=0)
                    cnt++;
            }
            else
            {
                f[fa]=fb;
                if(op==1)
                    d[fa]=d[b]-d[a];
                else
                    d[fa]=d[b]-d[a]+1;
            }
        }
        printf("%d\n",cnt);
        return 0;
    }
    
    • 1

    信息

    ID
    6075
    时间
    1000ms
    内存
    125MiB
    难度
    4
    标签
    递交数
    56
    已通过
    17
    上传者