• 三校联训 小澳的葫芦(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。

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

  • 相关阅读:
    第七周总结
    第六周总结
    第五周总结
    第四周总结
    第三周总结
    第二周总结
    第一周总结
    《需求分析和系统设计》阅读笔记三
    《需求分析和系统设计》阅读笔记二
    Linux——error while loading shared libraries 的解决方法
  • 原文地址:https://www.cnblogs.com/kamimxr/p/11481329.html
Copyright © 2020-2023  润新知