• hdu1272


    这虽然是个并查集水题,但是要注意的地方还真的比较多。

    首先要所有的房间都连在一个并查集上,然后就是不能存在环......如此应该可以水过.....

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    
    using namespace std;
    
    struct node{int x;int y;} no[200002];
    
    int f[200002],vis[200002];
    
    int find(int x)
    {
        return f[x]==x?x:f[x]=find(f[x]);
    }
    
    
    int main()
    {
        int i,a,b,aa,bb,maxx=0,num=0;
        //memset(vis,0,sizeof(vis));
        while(~scanf("%d%d",&a,&b))
        {
            //scanf("%d%d",&a,&b);
            if(a==-1&&b==-1)
                break;
            else if(a==0&&b==0)
            {
                if(num==0)
                {
                    printf("Yes
    ");
                    continue;
                }
                //getchar();
                int flag=0;
                for(i=0;i<=100005;i++)
                    f[i]=i;
                for(i=0;i<num;i++)
                {
                    aa=find(no[i].x);
                    bb=find(no[i].y);
                    if(aa==bb)
                    {
                        flag=1;
                        break;
                    }
                    else
                        f[aa]=bb;
                }
                //int cnt=0;
                for(int i=0;i<=100005;i++)
                find(i);
                int cnt=0;
                for(int i=0;i<=100005;i++)
                if(i!=find(i))
                {
                    cnt=find(i);
                    break;
                }
                for(int i=0;i<=100005;i++)
                if(i!=find(i)&&cnt!=find(i))
                {
                    flag=1;
                    break;
                }
                if(!flag)
                    printf("Yes
    ");
                else
                    printf("No
    ");
    
                //maxx=0;
                num=0;
                //memset(vis,0,sizeof(vis));
            }
            else
            {
                no[num].x=a;
                no[num++].y=b;
                /*if(maxx<a)
                    maxx=a;
                if(maxx<b)
                    maxx=b;*/
            }
        }
        return 0;
    }
    
  • 相关阅读:
    Android--多线程之Handler
    Android--Service之基础
    Android--UI之Fragment
    Android--多线程之图文混排
    python常用模块
    python应用之socket编程
    网络编程socket理论一
    pycharm Launching unittests with arguments
    python字符串格式化
    python数据类型之三
  • 原文地址:https://www.cnblogs.com/ziyi--caolu/p/3476762.html
Copyright © 2020-2023  润新知