三校联训 小澳的葫芦(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。
这样可以通过所有测试点。
三校联训 小澳的葫芦(calabash) 题解的更多相关文章
- 三校联训 【NOIP模拟】寻找
题面 “我有个愿望,我希望穿越一切找到你.” 这是个二维平面世界,平面上有n个特殊的果实,我从(0,0)点出发,希望得到尽量多的果实,但是出于某种特殊的原因,我的运动方式只有三种(假设当前我在(x,y ...
- Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子
Selenium WebDriver + Grid2 + RSpec之旅(三) ----入门小例子 第一个例子都是比较简单的博客园登录界面,就像学习编程语言时候都是从Hello,World!开始. 1 ...
- 三校联考 Day3
三校联考 Day3 大水题 题目描述:给出一个圆及圆上的若干个点,问两个点间的最远距离. solution 按极角排序,按顺序枚举,显然距离最远的点是单调的,线性时间可解出答案. 大包子的束缚 题目描 ...
- 【JZOJ4854】【NOIP2016提高A组集训第6场11.3】小澳的坐标系
题目描述 小澳者表也,数学者景也,表动则景随矣. 小澳不喜欢数学,可数学却待小澳如初恋,小澳睡觉的时候也不放过. 小澳的梦境中出现了一个平面直角坐标系,自原点,向四方无限延伸. 小澳在坐标系的原点,他 ...
- Java学习笔记三十:Java小项目之租车系统
Java小项目之租车系统 一:项目背景介绍: 根据所学知识,编写一个控制台版的“呱呱租车系统” 功能: 1.展示所有可租车辆: 2.选择车型.租车量: 3.展示租车清单,包含:总金额.总载货量以及其车 ...
- ios开发网络学习三:NSURLConnection小文件大文件下载
一:小文件下载 #import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDele ...
- 练手WPF(三)——扫雷小游戏的简易实现(上)
一.创建项目1.创建WPF项目,设置初始化窗口大小(初级难度):高x宽为430x350.2.添加文件夹Images,并添加相关图片. 3.xaml中引入图片资源. <Window.Resourc ...
- python flask框架学习(三)——豆瓣微信小程序案例(二)整理封装block,模板的继承
我们所要实现的效果: 点击电影的更多,跳转到更多的电影页面:点击电视剧的更多,跳转到更多的电视剧页面. 三个页面的风格相同,可以设置一个模板,三个页面都继承这个模板 1.在指定模板之前,把css放在一 ...
- python flask框架学习(三)——豆瓣微信小程序案例(一)templates的使用,宏的使用,前端后台传数据,前端写python语句
目录 一.templates的使用 (1)在templates里创建一个index.html (2)再在app.py里写 (3)展示效果 二.构建第一个电影评分 (1)准备好素材放进static里的i ...
随机推荐
- 一组相关联的问题:“sudo: unable to resolve host ###: Connection timed out”、软件启动速度超慢、IPv6无法使用
造冰箱的大熊猫@cnblogs 2018/9/15 近日陆续发现计算机出现几个问题,最终发现这些问题实际上是由同一个原因导致的 问题1:无法使用IPv6 问题2:无论是启动Emacs GUI还是在命令 ...
- 在vue中如何安装使用Vant
---恢复内容开始--- Vant中文文档地址:https://youzan.github.io/vant-weapp 1.创建Vue项目之后,运行安装命令:13:47:04 npm i vant - ...
- 数据预测算法-ARIMA预测
简介 ARIMA: AutoRegressive Integrated Moving Average ARIMA是两个算法的结合:AR和MA.其公式如下: 是白噪声,均值为0, C是常数. ARIMA ...
- char、varchar 哪种的搜索效率高
在MySQL 中char 和 varchar 都是存储字符串的,区别在于char有固定的长度,而varchar属于可变长的字符类型.char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于 ...
- Authing新功能——小程序扫码登录
近期,Authing 发布了新功能--小程序扫码登录. 小程序扫码登录指使用Authing小程序身份管家在网页端或其它客户端执行微信登录,目前的SDK仅支持客户端JavaScript.其它语言若想使用 ...
- (转)mysql基础命令
Sql代码 asc 按升序排列 desc 按降序排列 下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE ...
- 笔记本电脑如何同时上内外网(通过usb外接网卡实现虚拟机连外网)
我们这里达成的方式不是内外网切换,而是真正意义上的同时上内网和外网 原理: 通过构建虚拟机,利用usb外接网卡(某宝某东都有售,价格在50大洋左右)使虚机连接外网,然后开启虚拟机的unity模式 准备 ...
- LeetCode 14. 最长公共前缀(Longest Common Prefix)
题目描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow ...
- [Flask]jinja2渲染分页导航部件
注意: 1.在视图函数中通过request.args.get('page')获取page数,并将page传给macros.html模板文件 效果: 点击8,就跳转到第8页数据了 视图函数 @app.r ...
- hash模块MD5加密
MD5加密:获取32位加密字符串: 示例(MD5加密'123456')import hashlibhashObject=hashlib.md5(b'123456') #实例化,加密字符串不能直接加密, ...