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

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

    方法一:

    当你输入的x,y的根节点fx,fy相同时,说明已经可达,再连接就是有多余一条路径了。

    迷宫应该只有一个集合,多余一个就不符合。

    当直接输入00时,直接输出yes

    代码:

    View Code
     1 #include<stdio.h>
    2 int father[100001];
    3 bool visit[100001];
    4 int find(int x)
    5 {
    6 while(x!=father[x])
    7 x=father[x];
    8 return x;
    9 }
    10
    11 int main()
    12 {
    13 int i,x,y,min,max,flag,num,fx,fy;
    14 while(scanf("%d%d",&x,&y)!=EOF)
    15 {
    16 flag=0;
    17 min=100001;
    18 max=-1;
    19 if(x==-1&&y==-1)
    20 break;
    21 if(x==0&&y==0)
    22 {
    23 printf("Yes\n");
    24 continue;
    25 }
    26
    27 for(i=0;i<100001;i++)
    28 {
    29 father[i]=i;
    30 visit[i]=0;
    31 }
    32 while(1)
    33 {
    34 if(min>x)min=x;
    35 if(min>y)min=y;
    36 if(max<x)max=x;
    37 if(max<y)max=y;
    38 fx=find(x);
    39 fy=find(y);
    40 visit[x]=1;
    41 visit[y]=1;
    42 if(fx==fy)
    43 flag=-1;
    44 else
    45 father[fy]=fx;
    46 scanf("%d%d",&x,&y);
    47 if(x==0&&y==0)
    48 break;
    49 }
    50 num=0;
    51 for(i=min;i<=max;i++)
    52 if(father[i]==i&&visit[i])
    53 num++;
    54 if(num>1)
    55 flag=-1;
    56 if(flag==-1)
    57 printf("No\n");
    58 else
    59 printf("Yes\n");
    60 }
    61 return 0;
    62 }

    方法二:

    根据树的性质:边数=节点数-1;

    View Code
     1 #include<stdio.h>
    2 #include<string.h>
    3 int main()
    4 {
    5 bool s[100001];
    6 int x,y,count,num,max,min;
    7 while(scanf("%d%d",&x,&y)!=EOF)
    8 {
    9 memset(s,0,sizeof(s));
    10 if(x==-1&&y==-1)
    11 break;
    12 if(x==0&&y==0)
    13 {
    14 printf("Yes\n");
    15 continue;
    16 }
    17 count=0;
    18 max=-1;
    19 min=100001;
    20 while(1)
    21 {
    22 s[x]=1;s[y]=1;
    23 if(x>max)max=x;
    24 if(y>max)max=y;
    25 if(x<min)min=x;
    26 if(y<min)min=y;
    27 count++;
    28 scanf("%d%d",&x,&y);
    29 if(x==0&&y==0)
    30 break;
    31 }
    32 for(num=0;min<=max;min++)
    33 if(s[min])
    34 num++;
    35 if(count==num-1)
    36 printf("Yes\n");
    37 else
    38 printf("No\n");
    39 }
    40 return 0;
    41 }

      

  • 相关阅读:
    asp.net core 不依赖autofac实现aop
    C# 获取调用者信息
    IIS 命令学习
    Jenkins + PowerShell + .net core 自动打包
    gogs 自定义配置
    搜索文件内容神器:SearchMyFiles
    非常强大的磁盘计算大小工具:TreeSizeFree
    rancher入门教程
    IQueryable 表达式解析学习
    Sql server 入门权威指南
  • 原文地址:https://www.cnblogs.com/lujiacheng/p/2119211.html
Copyright © 2011-2022 走看看