zoukankan      html  css  js  c++  java
  • HDOJ1272 ( 小希的迷宫 ) 【并查集】

    Problem : 1272 ( 小希的迷宫 )     Judge Status : Accepted
    RunId : 5995331    Language : C++    Author : qq1203456195
    Code Render Status : Rendered By HDOJ C++ Code Render Version 0.01 Beta
     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cstring>
     4 #include <iostream>
     5 using namespace std;
     6 #define N 101000
     7 #define max(a,b) ((a)>(b))?(a):(b)
     8 int number[N];
     9 int set[N];
    10 int Find(int x)
    11 {
    12     int r=x,i,j;
    13     while (set[r]!=r)
    14         r=set[r];
    15     i=x;
    16     while (set[i]!=r)//i的父亲不是r,进行压缩
    17     {
    18         j=set[i];//记录i的父亲
    19         set[i]=r;//改变i的父亲
    20         i=j;//判断i的父亲
    21     }
    22     return r;
    23 }
    24 void Merge(int x,int y)
    25 {
    26     int a,b;
    27     a=Find(x);
    28     b=Find(y);
    29     set[a]=b;
    30 }
    31 int main()
    32 {
    33     int i,x,y,sets,lines,points,n;
    34     while (scanf("%d%d",&x,&y),~x||~y)
    35     {
    36         //初始化
    37         n=0;
    38         lines=0;
    39         sets=0;
    40         points=0;
    41         for(i=0;i<N;i++)
    42         {
    43             number[i]=0;
    44             set[i]=i;
    45         }
    46         //构造
    47         while (x||y)
    48         {
    49             n=max(x,n);
    50             n=max(y,n);
    51             number[x]=1;
    52             number[y]=1;
    53             lines++;
    54             Merge(x,y);
    55             scanf("%d%d",&x,&y);
    56         }
    57         //统计
    58         for (i=1;i<=n;i++)
    59         {
    60             if(number[i]==1)
    61             {
    62                 points++;
    63                 if(set[i]==i)    sets++;
    64             }                
    65         }
    66         //分析[注意n为0的情况]
    67         if((sets==1&&points==lines+1)||(points==0))
    68             printf("Yes\n");
    69         else
    70             printf("No\n");
    71     }
    72     return 0;
    73 }
    字节跳动内推

    找我内推: 字节跳动各种岗位
    作者: ZH奶酪(张贺)
    邮箱: cheesezh@qq.com
    出处: http://www.cnblogs.com/CheeseZH/
    * 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    javascript实现非递归--归并排序
    javascript实现二分查找
    深入javascript作用域链到闭包
    c++学习笔记2--constexpr,类型别名,auto
    用 Numba 加速 Python 代码
    Django1和2的区别
    Git的使用
    文件锁fcntl
    Https原理
    Flask-Login
  • 原文地址:https://www.cnblogs.com/CheeseZH/p/2518639.html
Copyright © 2011-2022 走看看