1 solutions

  • 0
    @ 2025-11-5 15:16:51

    C++ :

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    
    
    using namespace std;
    
    #define MAXN 100010
    
    int set[MAXN];
    
    void init()
    {
        for(int i=0;i<MAXN;i++)
            set[i]=i;
    }
    
    int find(int a)
    {
        int root=a;
        int tmp;
        while(set[root]!=root)
            root=set[root];
        while(set[a]!=root)
        {
            tmp=a;
            a=set[a];
            set[tmp]=root;
        }
        return root;
    }
    
    bool merge(int a,int b)
    {
        int x=find(a);
        int y=find(b);
        if(x==y)
            return false;
        set[x]=y;
        return true;
    }
    
    int main()
    {
        int a,b;
        int ans;
        while(~scanf("%d%d",&a,&b))
        {
            init();
            ans=0;
            merge(a,b);
            while(~scanf("%d",&a) && a!=-1)
            {
                scanf("%d",&b);
                if(find(a)==find(b))
                    ans++;
                else
                    merge(a,b);
            }
            printf("%d\n",ans);
        }
        return 0;
    }
    
    
    • 1

    Information

    ID
    16602
    Time
    3000ms
    Memory
    32MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By