zoukankan      html  css  js  c++  java
  • HDU 1272 小希的迷宫

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1272

    并查集,一开始没看出来.想到后原以为用并查集挺简单的.

    没想到各种坑啊.

    1.单个测试数据0 0,也就是空图,输出Yes.(什么设定啊?没房间了都.)

    2.图中可能有不只一个的集合.(赤裸裸的陷阱啊,我就这样卡了好久啊妈蛋)

    最后贴代码吧..又写得好丑

    #include <iostream>
    using namespace std;
    int p[101000],used[101000];
    int find(int x)
    {
        while(x != p[x])
            x = p[x];
        return x;
    }
    int flag,edge,vertex;
    void init()
    {
        flag = 1;
        for(int i=0;i<101000;i++)
        {
            p[i] = i;
        }
        memset(used,0,sizeof(used));
    
    }
    void merge(int s,int e)
    {
        if(!flag) return;
        int x = find(s);
        int y = find(e);
        if(x!=y)
            p[x] = y;
        else flag = 0;
    }
    
    int main()
    {
        int s,e;
    //    freopen("input.txt","r",stdin);
        while(cin>>s>>e&&(s+e)!=-2)
        {
            init();
            p[s] = e;
            used[s] = 1;    //标记结点已用,下同
            used[e] = 1;
            edge = 1;        //初始时为一边
            vertex = 2;        //初始时为二点
            if(s == 0 && e == 0) 
            {
                cout<<"Yes"<<endl;
                continue;
            }
            if(s == e ) flag = 0;//自环
    
            while(cin>>s>>e&&(s+e))
            {
                if(s == e) flag = 0;//自环
                merge(s,e);    //合并两点.边加1
                edge++;
                if(!used[s]) vertex++; //若该点未用,则为新点,结点加1,下同
                if(!used[e]) vertex++;
                used[s] = 1;
                used[e] = 1;
                
            }
            if(flag && vertex == edge+1 ) cout<<"Yes"<<endl;//若最终结点数与边数相差1,则为符合条件的无回路的连通图.图中可能有双集合.故须做此验证
            else cout<<"No"<<endl;
        }
        return 0;
    }
  • 相关阅读:
    数据一致性
    linux下关于程序性能和系统性能的工具、方法
    关于网站架构的一些文章
    列出man手册所有函数的方法
    dup和dup2函数以及管道的实现
    knowledge about apache
    第三篇 读后感
    课程作业02
    《大道至简》第二篇读后感
    课程作业01
  • 原文地址:https://www.cnblogs.com/destino74/p/3352085.html
Copyright © 2011-2022 走看看