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

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

    并查集的简单应用

    解题思路:题目意思是找到判断是不是连通无环的图,首先想到的就是并查集。

                  1判断成环的时候,只要判断输入边的两个点。有一个共同的父节点,那么这两个点就成环。

                  2判断连通的时候,只要判断根节点数为1即可。

                 注意:当输入的这组数据只有 0 0 时,依然是满足条件的,即应输出 "Yes"。

    View Code
     1  #include<iostream>
     2  using namespace std;
     3  #define MAX 100005
     4  int father[MAX],flag,sign[MAX];
     5  
     6  int FindSet(int x)
     7  {
     8      while(x!=father[x])
     9          x=father[x];
    10      return x;
    11  }
    12  
    13  void Union(int x,int y)
    14  {
    15      x=FindSet(x);
    16      y=FindSet(y);
    17      if(x!=y)
    18          father[x]=y;
    19      else flag=0; //同父节点,成环
    20  }
    21  
    22  int main()
    23  {
    24      int i,a,b;
    25      while(cin>>a>>b)
    26      {
    27          if(a==-1&&b==-1) break;
    28          if(a==0&&b==0)
    29          { cout<<"Yes"<<endl; continue; }
    30          for(i=1;i<MAX;i++) 
    31          {
    32              father[i]=i;
    33              sign[i]=0;
    34          }
    35          sign[a]=sign[b]=1;
    36          flag=1;
    37          Union(a,b);
    38          while(cin>>a>>b)
    39          {
    40              if(a==0&&b==0) break;
    41              Union(a,b);
    42              sign[a]=sign[b]=1;
    43          }
    44          int k=0;
    45          for(i=1;i<MAX;i++)
    46          {
    47              if(sign[i]&&father[i]==i) //判断根节点k数目
    48                  k++; 
    49              if(k>1) flag=0;
    50          }
    51          if(flag) cout<<"Yes"<<endl;
    52          else cout<<"No"<<endl;
    53      }
    54      return 0;
    55  }

     

  • 相关阅读:
    飞入飞出效果
    【JSOI 2008】星球大战 Starwar
    POJ 1094 Sorting It All Out
    POJ 2728 Desert King
    【ZJOI 2008】树的统计 Count
    【SCOI 2009】生日快乐
    POJ 3580 SuperMemo
    POJ 1639 Picnic Planning
    POJ 2976 Dropping Tests
    SPOJ QTREE
  • 原文地址:https://www.cnblogs.com/timeship/p/2622094.html
Copyright © 2011-2022 走看看