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

    hdoj 1272

    题目大意:给出一个图,注意这是个有向图(小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路)),由于这个错误调试了一上午

    解决:与poj 1308 一模一样,用并查集判断图的连通性,统计结点和边的个数来判断是否有回路

    #include <iostream>
    #include <set>
    #include <utility>
    using namespace std;
    int num[100005];
    bool mark[100005];
    int Max;
    set<pair<int,int> > s;
    int find(int x)
    {
        int t=x,a;
        while(num[t]>0)t=num[t];
        for(int i=x;num[i]>0; i=num[a])
        {
           a=i;
           num[i]=t;
        }
        return t;
    }
    void merge(int a,int b)
    {
        int fa=find(a);
        int fb=find(b);
        if(fa==fb)return ;
        int t=num[fa]+num[fb];
        if(num[fa]>num[fb]){num[fa]=fb;num[fb]=t;}
        else {num[fb]=fa;num[fa]=t;}
    }
    void init()
    {    
          Max=-1;
          s.clear();
          memset(num,-1,sizeof(num));
          memset(mark,0,sizeof(mark));
    }
    int main()
    {
        int a,b,cnt=0,edge=0,vex=0;
        init();
        while(scanf("%d%d",&a,&b),a>=0 && b>=0)
        {
            if(a==0 && b==0)
            {
                for(int i=1;i<=Max && cnt!=2;i++)
                {
                    if( mark[i] )
                    {
                        vex++;
                        if(num[i]<0)cnt++;
                    }
                }
                edge=s.size();
               //判断0 0的情况
                if(cnt==0 && vex==0 && edge==0){printf("Yes\n");continue;}
                if(cnt==1 && edge==vex-1)printf("Yes\n");
                else printf("No\n");
                cnt=0;
                edge=0;
                vex=0;
                init();
                continue;
            }
            if(a!=b)
            {
                 s.insert(make_pair(b,a));  
                 merge(a,b);
            }
            if(a>Max)Max=a;
            if(b>Max)Max=b;
            mark[a]=mark[b]=true;
      
        }
     //   system("pause");
        return 0;
    }
    

      

  • 相关阅读:
    第一阶段-坑爹猴
    终于做出来了
    一天就制作成了这些
    累成狗做出来的
    一周的学习,组合起来的成就
    刚刚出炉的搜狗浏览器最新版本
    自己动手设计了一下下百度首页
    数论:卢卡斯定理(求组合数)
    数据结构:ST表模板(可维护区间RMQ)
    快读和快写(可以使用__int128)
  • 原文地址:https://www.cnblogs.com/hpustudent/p/2133565.html
Copyright © 2011-2022 走看看