zoukankan      html  css  js  c++  java
  • 并查集图冲突hdu1272

    还是属于并查集的变形

    两个点仅仅有一条路径连通

    给出的两个点事先都是属于两个集合的

    须要给出的着条边构成一个集合

    算法复杂度还是挺高的

    每一个我都循环了100000次

    set2数组没清空 wrong了一次

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    int sett[100000 + 100];
    int set2[100000 + 100];
    int find2(int x)
    {
        while(x!=sett[x]) x=sett[x];
        return x;
    }
    int merge2(int fx,int fy)
    {
        if(fx == fy) return 1;
        else if(fx > fy) sett[fx]=fy;
        else sett[fy] = fx;
        return 0;
    }
    int main()
    {
        for(int i=1;i<=100000;i++) sett[i]=i;
        int x,y;
        int flag=1;
        while(scanf("%d%d",&x,&y)&&x!=-1&&y!=-1)
        {
            if(x==0&&y==0){
                int countt=0;
                for(int i=1;i<=100000;i++) if(sett[i]==i&&set2[i]) countt++;
                if(countt >= 2) flag=0;
    //            printf("countt %d
    ",countt);
                if(flag) printf("Yes
    ");
                else printf("No
    ");
                flag = 1;
                for(int i=1;i<=100000;i++) sett[i]=i;
                memset(set2,0,sizeof(set2));
            }
            else {
                set2[x]=1,set2[y]=1;
                int fx = find2(x);
                int fy = find2(y);
                if( merge2(fx,fy) ) { flag=0;  }
            }
        }
        return 0;
    }
    


  • 相关阅读:
    nginx
    同步和异步
    什么是ACID
    关系型数据库特点小结
    js 简单小知识
    join 和 left join 和 right join的区别?
    mysql中having和where区别?
    include和require区别
    什么是脏读,不可重复,幻读?
    Mysql常见面试题
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6952130.html
Copyright © 2011-2022 走看看