NOIP模拟 葫芦(分数规划)
【题目描述】
Tom 最喜欢的歌曲就是《葫芦娃》。
一日表演唱歌,他尽了洪荒之力,唱响心中圣歌。
随之,Tom 进入了葫芦世界。
葫芦世界有 n 个葫芦,标号为 1~ n。n 个葫芦由 m 条藤连接,每条藤连接了两个葫芦, 这些藤构成了一张有向无环图。Tom 爬过每条藤都会消耗一定的能量。
Tom 站在 1 号葫芦上(你可以认为葫芦非常大,可以承受 Tom 的体重),他想沿着藤爬 到 n 号葫芦上,其中每个葫芦只经过一次。
Tom 找到一条路径,使得消耗的能量与经过的葫芦数的比值最小。
【输入格式】
输入文件第一行两个正整数 n,m,分别表示葫芦的个数和藤数。
接下来 m 行,每行三个正整数 u,v,w,描述一条藤,表示这条藤由 u 连向 v,Tom 爬过 这条藤需要消耗 w 点能量。
【输出格式】
一行一个实数,表示答案(误差不超过 10^-3)。
【样例输入】
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 |
对于所有数据,Tom 爬过每条藤消耗的能量不会超过 10^3,且一定存在一条从 1 到 n 的路径。
【题目分析】
另建一个起点 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。
【代码~】
#include<bits/stdc++.h>
#define eps 0.0001
using namespace std;
const int N=40000,M=60600;
int tot,que[N],a,b,nxt[M],head[N],vis[M],n,m,dis[M],c;
double pre[M],to[M];
bool edge[N];
void addedge(int a,int b,int c)
{++tot;nxt[tot]=head[a];head[a]=tot;vis[tot]=b;dis[tot]=c;return ;
}
bool spfa(double v)
{for(int i=2;i<=n;i++)to[i]=1999999999;to[1]=0;for(int i=1;i<=tot;i++)pre[i]=dis[i]-v;int he=1,tail=1;que[he]=1;edge[1]=true;while(he<=tail){int u=que[he];edge[u]=false;for(int p=head[u],v=vis[p];p;p=nxt[p],v=vis[p]){if(to[v]-eps>to[u]+pre[p]){to[v]=to[u]+pre[p];if(!edge[v]){que[++tail]=v;edge[v]=true;}}}he++;}return v-to[n]>eps;
}
int main()
{cin>>n>>m;for(int i=1;i<=m;++i){cin>>a>>b>>c;addedge(a,b,c);}double mid,l=0,r=1e3;while((r-l)>eps){mid=(l+r)/2.0;if(spfa(mid))r=mid;else l=mid;}printf("%0.3lf",l);return 0;
}
转载于:https://www.cnblogs.com/Ishtar/p/10010810.html
NOIP模拟 葫芦(分数规划)相关推荐
- UPC 小澳的葫芦 (最短路+01分数规划 )
不懂01分数规划的可以先看大佬博客~ 传送门 01分数规划,即给定模型求sum(ai)/sum(bi)的最值: 我们可以改变一下式子的形态: sum(ai)/sum(bi)>=L =sum(ai ...
- 【2018/10/11】T3 - 0/1分数规划 - 葫芦
葫芦 描述 Tom 最喜欢的歌曲就是<葫芦娃>. 一日表演唱歌,他尽了洪荒之力,唱响心中圣歌. 随之,Tom 进入了葫芦世界. 葫芦世界有 n 个葫芦,标号为 1~ n.n 个葫芦由 m ...
- 01分数规划 东师oj3582: 小澳的葫芦
题目描述 题目描述 小澳最喜欢的歌曲就是<葫芦娃>. 一日表演唱歌,他尽了洪荒之力,唱响心中圣歌. 随之,小澳进入了葫芦世界. 葫芦世界有n个葫芦,标号为1~ n.n个葫芦由m条藤连接,每 ...
- POJ2728 Desert King ——01分数规划Dinkelbach迭代法+最小生成树prim算法
首先,纪念我用Linux系统AC的第一题- 安装这个万恶的NOI Linux系统费了6小时的时间,不过好在最后终于装上了,但是因为我安装的Linux系统比较烂,还遭到了小花儿和js的鄙视,唉,本人 ...
- NOIP模拟赛csy2021/10/30
NOIP模拟赛csy2021/10/30 比赛时间规划 赛后反思与总结 这..总的来说感觉打的很不好,根本没有状态,有一部分原因是今天来晚了,太慌,更多的还是这次题感觉很难o(╥﹏╥)o 比赛时间规划 ...
- 闵梓轩大佬のnoip模拟题D1 总结 2017/10/26
背景 题目概括 T1 题面 分析 90分算法 满分算法 T2 题面 分析 部分分算法 满分算法 满分代码 T3 题面 分析 代码 总结 背景 这道题目是去年的金牌大佬闵梓轩在一年前出的一套noip模拟 ...
- NOIP模拟赛 四校联考 递推 + 分类讨论 + 树上期望
NOIP 模拟题 题目名称兔子被子蚊子 源程序文件名rabbit.cpp quilt.cpp mosquito.cpp 输入文件名rabbit.in quilt.in mosquito.in 输出文件 ...
- poj2976(0-1分数规划)
0-1分数规划 设x[i]等于1或0. 则我们所求的比率 rate = ∑(cost[i] * x[i]) / ∑(cost[i] * x[i]), 0≤i<m . z( rate ) = ∑( ...
- 点分治问题 ----------- luoguP2942 [WC2010]重建计划 [点分治 + bfs + 单调队列 + 预处理建树 + 二分 + 01分数规划]
题目链接 解题思路: 1.对于这个Avgvalue=∑e∈sv(e)∣s∣Avgvalue = \frac{\sum_{e\in s}v(e)}{|s|}Avgvalue=∣s∣∑e∈sv(e) ...
最新文章
- css 边缘闪光_css文字渐变+内发光+投影效果
- 使用cocoapods时,import 找不到头文件。
- 表变量与临时表的优缺点?(ZT)
- SAP Spartacus加载delivery region的实现
- 在Spring MVC Web应用程序中添加社交登录:单元测试
- Python获取当前目录
- python 配置文件介绍
- Linux crontab 定时任务命令详解
- 智能车学习(八)——菜单的实现
- 坑了我一个小时的脚本执行
- lighttpd 之防盗链
- qa qc qm的区别
- [Everyday Mathematics]20150112
- Quartus II 9.0正式版下载
- MATLAB 常见取整函数
- Company interview process
- 生活中的“人工智能”,哪些是你正在用的?
- python从原始代码(matplotlib)到加图形界面(tkinter),最后到制作软件(一元二次方程软件)(如何做一个python软件)
- 服务器从购买到配置全流程
- intellij idea如何在当前工作空间下打开新项目
热门文章
- 高德地图3D轨迹回放 + 视野跟随功能
- android音量键调节听筒音量的大小
- matlab 轴系校中,轴系校中简介.ppt
- 蚂蚁区块链投票案例(二)---投票合约设计开发
- Docker Nginx 如何重新加载配置
- 鸿蒙四月几号升级啊,华为鸿蒙系统升级时间表 鸿蒙系统第二批升级时间是什么时候...
- RTOS成功取代Linux成为天猫精灵OS的关键 -- AliOS Things 维测专题
- 快速分析极兔快递物流发件到件超过36小时的时间差
- Surface电池寿命延长
- 2020软件构造实验三