zoukankan      html  css  js  c++  java
  • csu1010: Water Drinking

    /*

    本题的题意:

    沙漠中有很多骆驼和一个池塘,0表示池塘,1-N表示骆驼,
    输入的两个数表示两只骆驼,其中前面的那一头靠近池塘,
    所有的骆驼队列不交叉不相连,求站在队尾但是离水井最近的骆驼编号

    经过分析最后还是要先构造一个树,然后寻找离0最近的一个点,当结果是相等的级别的时候将结果返回最小的那个值

    */

    参考代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #define maxn 100010
     4 
     5 int pre[maxn], dis[maxn];
     6 //pre 数组代表当前骆驼的前一个骆驼, dis 数组代表当前骆驼到水井的距离
     7 int main()
     8 {
     9     int n;
    10     while(scanf("%d", &n) != EOF){
    11         int x, y, i, ans, mind;
    12         memset(dis, 0, sizeof(dis));
    13         //父节点初始化 并查集必备
    14         for(i = 0; i < n; i++)
    15             pre[i] = i;
    16         for(i = 0; i < n; i++){
    17             scanf("%d %d", &x, &y);
    18             pre[y] = x;
    19             dis[x] = 1;
    20         }
    21         for(mind = n + 1, ans = i = 0; i <= n; i++){//注意:mind的初始值要大于n
    22             //如果dis[i]为0 即该节点无子节点
    23             if(!dis[i]){
    24                 x = i; //x 是一个临时变量
    25                 //如果这个节点有父节点 递归求出距离
    26                 while(pre[x] != x){
    27                     x = pre[x];
    28                     dis[i]++;
    29                 }
    30                 //找出最大距离所在的骆驼
    31                 if(!x && dis[i] < mind){
    32                     mind = dis[i];
    33                     ans = i;
    34                 }
    35             }
    36         }
    37         printf("%d
    ", ans);
    38     }
    39     return 0;
    40 }
    我要坚持一年,一年后的成功才是我想要的。
  • 相关阅读:
    IDEA2019破解版安装
    Docker (一)安装与基本命令
    js导出PDF
    python入门笔记一安装
    微信内关闭当前页面
    微信一些网页
    内网穿透工具:钉钉HTTP内网穿透使用详解
    html生成二维码,qr
    IDEA无法正常启动(打不开&报错)
    微信测试号
  • 原文地址:https://www.cnblogs.com/tianxia2s/p/3895126.html
Copyright © 2011-2022 走看看