1 solutions

  • 0
    @ 2025-3-3 16:27:13

    C++ :

    #include <cstdio>
    #include <cstdlib>
    int size[1000001],f[1000001],d[1000001];
    int inf=30001;
    int find(int x)
    {
        if(f[x]==x)
        {
            return x;
        }
        int t1=f[x];
        int t2=find(f[x]);
        f[x]=t2;
        d[x]+=d[t1];
        return t2;
    }
    int main()
    {
        int n=0;
        scanf("%d",&n);
        for(int i=1;i<=inf;i++)
        {
            f[i]=i;
            size[i]=1;
        }
        for(int i=1;i<=n;i++)
        {
            char t[5];
            int x=0,y=0;
            scanf("%s %d %d",t+1,&x,&y);
            int tx=find(x),ty=find(y);
            if(t[1]=='M')
            {
                f[tx]=ty;
                d[tx]=size[ty];
                size[ty]+=size[tx];
                size[tx]=0;
            }
            else if(t[1]=='C')
            {
                if(tx!=ty)
                {
                    printf("-1\n");
                }
                else
                {
                    printf("%d\n",abs(d[x]-d[y])-1);
                }
            }
        }
        return 0;
    }
    
    • 1

    Information

    ID
    10167
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By