zoukankan      html  css  js  c++  java
  • hdu 1272 并查集

    题目大意:给一个图,不能出现环,而且只能有一个联通子图。

    好惆怅,又是爆栈又是wrong answer的。

    #include<iostream>
    #include<cstdio>
    using namespace std;
    
    const int maxn=100005;
    int f[maxn],ans;
    bool v[maxn];
    
    void init(){for(int i=1;i<=100000;i++) f[i]=i,v[i]=0;}
    
    int findset(int x){ return f[x]!=x?f[x]=findset(f[x]):f[x];}
    
    void merge(int a,int b)
    {
        int fa=findset(a);
        int fb=findset(b);
        if(fa==fb) ans=1;
        if(fa>fb) f[fa]=fb;
        else f[fb]=fa;
    }
    
    int main()
    {
        int a,b,i,sum;
        while(scanf("%d %d",&a,&b) && !(a==-1 && b==-1))
        {
            ans=0;
            init();
            while(1)
            { 
                if(a==0 && b==0) break;
                merge(a,b);v[a]=v[b]=1;
                scanf("%d %d",&a,&b);
            }
            if(ans){ printf("No
    ");continue;}
            sum = 0;  
            for(i = 1; i <= 100000; i++)  
            if(v[i] && f[i] == i)  
                sum++;  
            if(sum > 1)  
                printf("No
    ");  
            else  
                printf("Yes
    ");
        }
        return 0;
    }
  • 相关阅读:
    第二次作业
    第四次作业
    第三次作业
    第二次作业
    第一次作业
    第四次作业
    第三次作业
    第二次作业
    第一次大学作业
    第四次作业
  • 原文地址:https://www.cnblogs.com/xiong-/p/3583352.html
Copyright © 2011-2022 走看看