题目描述

“那是一条神奇的天路诶~,把第一个神犇送上天堂~”,XDM先生唱着这首“亲切”的歌曲,一道猥琐题目的灵感在脑中出现了。

和C_SUNSHINE大神商量后,这道猥琐的题目终于出现在本次试题上了,旨在难到一帮大脑不够灵活的OIer们(JOHNKRAM真的不是说你……)。

言归正传,小X的梦中,他在西藏开了一家大型旅游公司,现在,他要为西藏的各个景点设计一组铁路线。但是,小X发现,来旅游的游客都很挑剔,他们乘火车在各个景点间游览,景点的趣味当然是不用说啦,关键是路上。试想,若是乘火车一圈转悠,却发现回到了游玩过的某个景点,花了一大堆钱却在路上看不到好的风景,那是有多么的恼火啊。

所以,小X为所有的路径定义了两个值,Vi和Pi,分别表示火车线路的风景趣味度和乘坐一次的价格。现在小X想知道,乘客从任意一个景点开始坐火车走过的一条回路上所有的V之和与P之和的比值的最大值。以便为顾客们推荐一条环绕旅游路线(路线不一定包含所有的景点,但是不可以存在重复的火车路线)。

于是,小X梦醒之后找到了你……

输入输出格式

输入格式:

第一行两个正整数N,M,表示有N个景点,M条火车路线,火车路线是单向的。

以下M行,每行4个正整数,分别表示一条路线的起点,终点,V值和P值。

注意,两个顶点间可能有多条轨道,但一次只能走其中的一条。

输出格式:

一个实数,表示一条回路上最大的比值,保留1位小数。

若没有回路,输出-1。

输入输出样例

输入样例#1:

5 6
1 2 1 1
4 1 6 2
5 4 8 1
2 3 2 2
5 2 4 1
3 5 6 4

输出样例#1:

2.3

说明

对于30%的数据,1≤N≤100,1≤M≤20;

对于60%的数据,1≤N≤3,000,1≤M≤2,000;

对于100%的数据,1≤N≤7,000,1≤M≤20,000,1≤Vi,Pi≤1,000.

保证答案在200以内.

spfa判环+二分答案

#include<cstdio>
#include<cstring>
using namespace std;
int n,m;
const int N=200000;
float p[N],v[N];
struct node{int to,next;float p,v,w;
}edge[N];int head[N],num=0;
inline void add_edge(int x,int y,float p,float v)
{edge[++num].to=y;edge[num].next=head[x];edge[num].p=p;edge[num].v=v;head[x]=num;
}
bool vis[N];float dis[N],mid;
inline bool spfa(int x)
{vis[x]=1;for(int i=head[x];i;i=edge[i].next){int v=edge[i].to;if(dis[x]+edge[i].w<dis[v]){if(vis[v]==1)return false;dis[v]=dis[x]+edge[i].w;if(spfa(v)==false) return false;}}vis[x]=0;return true;
}
int main()
{scanf("%d%d",&n,&m);int a,b;for(int i=1;i<=m;i++){scanf("%d%d%f%f",&a,&b,&v[i],&p[i]);add_edge(a,b,p[i],v[i]);}for(int i=1;i<=n;i++) add_edge(0,i,0,0);float l=0,r=200;while(l+0.01<r){mid=(l+r)/2.0;memset(vis,0,sizeof (vis));memset(dis,127,sizeof (dis));dis[0]=0;for(int x=1;x<=n;x++)for(int y=head[x];y;y=edge[y].next)edge[y].w=mid*edge[y].p-edge[y].v;if(!spfa(0))l=mid;else r=mid;}if(l==0)puts("-1");else printf("%.1lf\n",r);return 0;
}

  

转载于:https://www.cnblogs.com/sssy/p/7143235.html

luogu P1768 天路相关推荐

  1. 洛谷 P1768 天路

    P1768 天路 题目描述 "那是一条神奇的天路诶~,把第一个神犇送上天堂~",XDM先生唱着这首"亲切"的歌曲,一道猥琐题目的灵感在脑中出现了. 和C_SUN ...

  2. 浴谷 P1768 天路

    P1768 天路 题目描述 "那是一条神奇的天路诶~,把第一个神犇送上天堂~",XDM先生唱着这首"亲切"的歌曲,一道猥琐题目的灵感在脑中出现了. 和C_SUN ...

  3. P1768 天路(有向图环)

    P1768 天路(有向图环) 找到所有环的 最大的sumvsump\dfrac{sum_v}{sum_p}sump​sumv​​ 转化为差分约束问题. 然后用spfa判负环,确定是否有解. 注意本题用 ...

  4. 洛谷P1768 天路

    题目描述 "那是一条神奇的天路诶~,把第一个神犇送上天堂~",XDM先生唱着这首"亲切"的歌曲,一道猥琐题目的灵感在脑中出现了. 和C_SUNSHINE大神商量 ...

  5. P1768 天路(最优比率环)

    天路 求一个环最大化∑vi∑ci\frac{\sum v_i}{\sum c_i}∑ci​∑vi​​ 按照010101分数规划的基本套路来- f(r)=∑vi−r∗∑cif(r)=\sum v_i-r ...

  6. P1768 天路(spfa+二分答案+01分数规划)

    题目 题目传送门 输入输出样例 输入样例 5 6 1 2 1 1 4 1 6 2 5 4 8 1 2 3 2 2 5 2 4 1 3 5 6 4 输出样例 2.3 题解 本题我们要求max⁡∑vi∑p ...

  7. Jozky 刷题目录

    文章目录 本目录参考OI-Wiki 还未解决专区 算法基础 枚举 模拟 递归&分治 贪心 排序 前缀和&差分 二分 倍增 构造 搜索 DFS && BFS 双向搜索 启 ...

  8. 天路 洛谷p1768

    题目描述 "那是一条神奇的天路诶~,把第一个神犇送上天堂~",XDM先生唱着这首"亲切"的歌曲,一道猥琐题目的灵感在脑中出现了. 和C_SUNSHINE大神商量 ...

  9. luogu P1549 棋盘问题(2) 题解

    luogu P1549 棋盘问题(2) 题解 题目描述 在\(N * N\)的棋盘上\((1≤N≤10)\),填入\(1,2,-,N^2\)共\(N^2\)个数,使得任意两个相邻的数之和为素数. 例如 ...

最新文章

  1. php redis安装使用
  2. python学多久可以接单-零基础小白多久能学会python
  3. 选择海外数据中心是否等级越高越好
  4. oracle按特定字符截取字符串_妙用字符串的替换和截取让Shell脚本精准得到你心中的那个“她”...
  5. HDU 2444 The Accomodation of Students 二分图匹配
  6. 简洁的个人导航主页API网站源码 随机背景图
  7. SQL语句使用总结(一)
  8. java 坦克重叠_【Java】我所知道坦克大战(单机版)之画出坦克的实心圆、让圆动起来、双缓冲解决闪烁问题...
  9. ORA-28056:Writing audit records to Windows EventLog failed的问题
  10. GAN 的渐进式训练方法 PI-REC:手绘草稿迅速重建为完整图像...
  11. nvinfer1::cudnn::Engine::deserialize()出错的原因
  12. eclipse内存设置参数
  13. 如何找到chromedriver与chrome的对应版本
  14. 超强文本编辑器SciTE配置方法详细实例
  15. 【前端】基于layui写的一个高级搜索(筛选)功能
  16. Unicode双向算法详解(bidi算法)(三)
  17. 微信自动跳转领支付宝红包JS实践
  18. 基于PHP的精品课程教学网站
  19. STUN和TURN技术浅析
  20. Mac Chrome浏览器快捷键大全

热门文章

  1. 金蝶web前端一面(已挂)
  2. 我的2014年总结 - 一些失败的面试经历
  3. MATLAB永磁同步电机电角度,永磁同步电机控制方法以及五种常见问题的大咖讨论全过程整理...
  4. 预售登上计算机新书热卖榜TOP1,开年重磅,助力Java程序员飙升核心技能
  5. 单链表销毁的两种方式
  6. Google地图之我的地图
  7. /etc/profile文件置空或者为丢失,(各种命令用不了)需要对环境变量恢复
  8. Jsoup学习 JAVA爬虫爬取美女网站 JAVA爬虫爬取美图网站 爬虫
  9. Kaggle系列(一):Spaceship Titanic(太空飞船泰坦尼克)
  10. 安卓 c语言宝典,C语言宝典app下载-C语言宝典下载v1.8.0-西西软件下载