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

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int N=1e5;
    int a,b;
    int p[N+10];
    // 标记走过的房间 
    bool vis[N+10];
    int find(int x)
    {
        if(p[x]!=x)
            p[x]=find(p[x]);
        return p[x];
    }
    void Union(int a,int b)
    {
        int pa=find(a);
        int pb=find(b);
        if(pa!=pb)
            p[pb]=pa;
    }
    int main()
    {
        while(cin>>a>>b)
        {
            if(a==-1&&b==-1)
                break;
            // a,b 均为 0 时,也要输出 Yes;空树也是树
            if(a==0&&b==0)
            {
                cout<<"Yes"<<endl;
                continue;
            }
            for(int i=1;i<=N;i++)
                p[i]=i,vis[i]=0;
            int maxx=0;
            bool flag=0;
            while(a||b)
            {
                vis[a]=1;
                vis[b]=1;
                //是否成环 
                if(find(a)==find(b))
                    flag=1;
                Union(a,b);
                // 找出房间编号的最大值     
                maxx=max(maxx,max(a,b));
                cin>>a>>b;
            }
            if(flag)
                cout<<"No"<<endl;
            else
            {
                int cnt=0;
                // 计算共有几个符合条件的联通集合 
                for(int i=1;i<=maxx;i++)
                    if(vis[i]&&p[i]==i)
                        cnt++;
                // 这里可能存在不止一个集合,这样的话 ans 值就大于 1 了,这样就不满足题意了,就该输出 No 
                if(cnt==1)
                    cout<<"Yes"<<endl;
                else
                    cout<<"No"<<endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    PLSQL Developer新建表空间
    oracle中where子句和having子句中的区别
    ORACLE基本数据类型
    Oracle数据库字符集问题
    问题及解决方法
    Show Profile
    批量数据脚本
    慢查询日志
    GROUP BY关键字优化
    order by关键字优化
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12251535.html
Copyright © 2011-2022 走看看