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;
    }
  • 相关阅读:
    [SQL Server]如何激活一个账号
    sqlcmd命令详解
    SQL Server Express 2008 安装程序
    SharePoint中的本地化(Localization)
    2009十大企业应用产品
    2010年10大战略技术
    十个理由促使小企业敢于触碰“云计算”
    如何改进网站性能
    sqlcmd详细示例
    VMware网络配置详解
  • 原文地址:https://www.cnblogs.com/destino74/p/3352085.html
Copyright © 2011-2022 走看看