• 三校联训 小澳的葫芦(calabash) 题解


    题面:
    小澳的葫芦
    【 题目描述】
    小澳最喜欢的歌曲就是《葫芦娃》。
    一日表演唱歌,他尽了洪荒之力,唱响心中圣歌。
    随之,小澳进入了葫芦世界。
    葫芦世界有 n 个葫芦,标号为 1~ n。 n 个葫芦由 m 条藤连接, 每条藤连接了
    两个葫芦, 这些藤构成了一张有向无环图。小澳爬过每条藤都会消耗一定的能量。
    小澳站在 1 号葫芦上(你可以认为葫芦非常大,可以承受小澳的体重),他
    想沿着藤爬到 n 号葫芦上, 其中每个葫芦只经过一次。
    小澳找到一条路径,使得消耗的能量与经过的葫芦数的比值最小。
    【 输入格式】
    输入文件名为 calabash.in。
    输入文件第一行两个正整数 n,m, 分别表示葫芦的个数和藤数。
    接下来 m 行,每行三个正整数 u,v,w,描述一条藤,表示这条藤由 u 连向 v,
    小澳爬过这条藤需要消耗 w 点能量。
    【 输出格式】
    输出文件名为 calabash.out。
    一行一个实数, 表示答案( 误差不超过 10^-3)。
    【 输入输出样例】
    calabash.in calabash.out
    4 6
    1 2 1
    2 4 6
    1 3 2
    3 4 4
    2 3 3
    1 4 8
    2.000【输入输出样例说明】
    有 4 种爬法:
    1->4,消耗能量 8,经过 2 个葫芦, 比值为 8/2=4。
    1->2->4, 消耗能量 1+6=7, 经过 3 个葫芦, 比值为 7/3≈2.33。
    1->3->4, 消耗能量 2+4=6, 经过 3 个葫芦, 比值为 6/3=2。
    1->2->3->4, 消耗能量 1+3+4=8, 经过 4 个葫芦, 比值为 8/4=2。
    所以选第三种或第四种方案, 答案为 2。
    【数据规模与约定】
    测试点编号 n m 特殊说明
    1 2 1
    2 100 99 除 1 外,所有葫芦的入度均为 1
    3 100 105 所有从 1到 n的路径经过的葫芦数相等
    4 100 1000
    5 100 1000
    6 199 198 除 1 外,所有葫芦的入度均为 1
    7 200 231 所有从 1到 n的路径经过的葫芦数相等
    8 200 2000
    9 200 2000
    10 200 2000
    对于所有数据,小澳爬过每条藤消耗的能量不会超过 10^3, 且一定存在一条从 1
    到 n 的路径。

    algorithm1

             第一个测试点只有一条边,输出w/2就可以啦。

           可以通过第1个测试点。

    algorithm2

           注意到“除1外,所有葫芦的入度均为1”,也就是说,从1到n的路径只有一条,输出这一条路径的长度与这条路径上的点数的比值就可以了。

           可以通过第1、2、6个测试点。

    algorithm3

           对于这样一类特殊数据,“所有从1到n的路径经过的葫芦数相等”,也就是说1~n的最短路就是最优路径,最短路的长度与路径上的点数的比值就是答案。

           可以通过第1、2、3、6、7个测试点。

    algorithm4

           另建一个起点0,连接一条0到1长度为0的边,就此将问题转化为长度和边数最小比值。这个问题的求解需要分数规划。

           假设答案为ans,对于任意一条由k条边组成的路径,有:

           (w1+w2+w3+…+wk)/k>=ans;

           转化一下:

           (w1+w2+w3+…+wk) >=ans*k;

           即(w1-ans)+(w2-ans)+(w3-ans)+…+(wk-ans)>=0。

           于是就得到了这样一个算法:

           二分答案x,每次将每一条边的权值减去x求最短路,判断1~n的最短路是否大于0:若大于0,则说明答案ans>x;否则说明ans<x。

           这样可以通过所有测试点。

  • 相关阅读:
    【转载】 NumPy之:数据类型对象dtype
    在深度学习的视觉VISION领域数据预处理的魔法常数magic constant、黄金数值的复现: mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225]
    关于Numpy数据类型对象(dtype)使用详解
    【转载】 大端模式和小端模式的区别是什么?
    在使用pytorch官方给出的torchvision中的预训练模型参数时为保证收敛性要求使用原始的数据预处理方式
    【转载】 解决 sudo echo x > 时的 Permission denied错误
    Javascript高级程序设计第二版前三章基本数据等笔记
    冒号课堂§3.4:事件驱动
    理解 JavaScript 闭包
    Browser clientX scrollLeft clientLeft
  • 原文地址:https://www.cnblogs.com/kamimxr/p/11481329.html
Copyright © 2020-2023  润新知