1 条题解

  • 0
    @ 2024-12-22 11:04:49

    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

    信息

    ID
    376
    时间
    3000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者