1690: [Usaco2007 Dec]奶牛的旅行

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 1118  Solved: 595
[Submit][Status][Discuss]

Description

作为对奶牛们辛勤工作的回报,Farmer John决定带她们去附近的大城市玩一天。旅行的前夜,奶牛们在兴奋地讨论如何最好地享受这难得的闲暇。 很幸运地,奶牛们找到了一张详细的城市地图,上面标注了城市中所有L(2 <= L <= 1000)座标志性建筑物(建筑物按1..L顺次编号),以及连接这些建筑物的P(2 <= P <= 5000)条道路。按照计划,那天早上Farmer John会开车将奶牛们送到某个她们指定的建筑物旁边,等奶牛们完成她们的整个旅行并回到出发点后,将她们接回农场。由于大城市中总是寸土寸金,所有的道路都很窄,政府不得不把它们都设定为通行方向固定的单行道。 尽管参观那些标志性建筑物的确很有意思,但如果你认为奶牛们同样享受穿行于大城市的车流中的话,你就大错特错了。与参观景点相反,奶牛们把走路定义为无趣且令她们厌烦的活动。对于编号为i的标志性建筑物,奶牛们清楚地知道参观它能给自己带来的乐趣值F_i (1 <= F_i <= 1000)。相对于奶牛们在走路上花的时间,她们参观建筑物的耗时可以忽略不计。 奶牛们同样仔细地研究过城市中的道路。她们知道第i条道路两端的建筑物 L1_i和L2_i(道路方向为L1_i -> L2_i),以及她们从道路的一头走到另一头所需要的时间T_i(1 <= T_i <= 1000)。 为了最好地享受她们的休息日,奶牛们希望她们在一整天中平均每单位时间内获得的乐趣值最大。当然咯,奶牛们不会愿意把同一个建筑物参观两遍,也就是说,虽然她们可以两次经过同一个建筑物,但她们的乐趣值只会增加一次。顺便说一句,为了让奶牛们得到一些锻炼,Farmer John要求奶牛们参观至少2个建筑物。 请你写个程序,帮奶牛们计算一下她们能得到的最大平均乐趣值。

Input

* 第1行: 2个用空格隔开的整数:L 和 P

* 第2..L+1行: 第i+1行仅有1个整数:F_i * 第L+2..L+P+1行: 第L+i+1行用3个用空格隔开的整数:L1_i,L2_i以及T_i, 描述了第i条道路。

Output

* 第1行: 输出1个实数,保留到小数点后2位(直接输出,不要做任何特殊的取 整操作),表示如果奶牛按题目中描述的一系列规则来安排她们的旅 行的话,她们能获得的最大平均乐趣值

Sample Input

5 7
30
10
10
5
10
1 2 3
2 3 2
3 4 5
3 5 2
4 5 5
5 1 3
5 2 2

Sample Output


6.00

输出说明:

如果奶牛选择1 -> 2 -> 3 -> 5 -> 1的旅行路线,她们能得到的总乐趣值
为60,为此她们得花费10单位的时间在走路上。于是她们在这次旅行中的平均乐
趣值为6。如果她们走2 -> 3 -> 5 -> 2的路线,就只能得到30/6 = 5的平均乐
趣值。并且,任何去参观建筑物4的旅行路线的平均乐趣值都没有超过4。

HINT

Source

这个应该叫分数规划?二分+spfa判负环

#include <bits/stdc++.h>
#define ll long long
#define eps 1e-7
#define inf 10000000
using namespace std;
inline int read(){int x=0;int f=1;char ch=getchar();while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}return x*f;
}
const int MAXN=1e4+10;
struct node{int y,next;double v,t;
}e[MAXN];
double dis[MAXN];int vis[MAXN],linkk[MAXN],len,n,m,flag,f[MAXN];
inline void insert(int xx,int yy,int tt){e[++len].y=yy;e[len].t=tt;e[len].next=linkk[xx];linkk[xx];linkk[xx]=len;
}
inline void rebuild(double x){for(int i=1;i<=n;i++){for(int j=linkk[i];j;j=e[j].next){e[j].v=e[j].t*x-f[e[j].y];}}
}
inline void spfa(int st){vis[st]=1;for(int i=linkk[st];i;i=e[i].next){if(flag) return;if(dis[e[i].y]>dis[st]+e[i].v){dis[e[i].y]=dis[st]+e[i].v;if(vis[e[i].y]) {flag=1;return;}else spfa(e[i].y);}}vis[st]=0;
}
inline bool work(){for(int i=1;i<=n;i++) vis[i]=dis[i]=0;flag=0;for(int i=1;i<=n;i++){if(!vis[i]){spfa(i);if(flag) return 1;}}return 0;
}
int main(){n=read();m=read();for(int i=1;i<=n;i++) f[i]=read();for(int i=1;i<=m;i++){int xx=read();int yy=read();int tt=read();insert(xx,yy,tt);}double l=0,r=10000;while((r-l)>0.001){double mid=(l+r)*0.5;rebuild(mid);if(work()) l=mid;else r=mid;}printf("%.2f\n",l);return 0;
}

  

转载于:https://www.cnblogs.com/something-for-nothing/p/8133800.html

BZOJ 1690 Usaco2007 Dec 奶牛的旅行相关推荐

  1. bzoj 1690: [Usaco2007 Dec]奶牛的旅行(01分数规划--最优比率环)

    01分数规划问题: 给你n个物品,a[i]表示第i个物品的收益,b[i]表示代价,x[i]表示选或不选,求一个最佳方案使得下式取值最大 通用解: 当然是从式子上考虑,定义函数F[cnt]如下: 其中c ...

  2. bzoj 1690: [Usaco2007 Dec]奶牛的旅行——分数规划+spfa判负环

    Description 作为对奶牛们辛勤工作的回报,Farmer John决定带她们去附近的大城市玩一天.旅行的前夜,奶牛们在兴奋地讨论如何最好地享受这难得的闲暇. 很幸运地,奶牛们找到了一张详细的城 ...

  3. 【BZOJ】1690: [Usaco2007 Dec]奶牛的旅行(分数规划+spfa)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1690 第一题不是水题的题.. 分数规划.. T-T 百度吧..http://blog.csdn.ne ...

  4. 1690: [Usaco2007 Dec]奶牛的旅行

    Description 作为对奶牛们辛勤工作的回报,Farmer John决定带她们去附近的大城市玩一天.旅行的前夜,奶牛们在兴奋地讨论如何最好地享受这难得的闲暇. 很幸运地,奶牛们找到了一张详细的城 ...

  5. BZOJ1690 Usaco2007 Dec 奶牛的旅行 【01分数规划】

    BZOJ1690 Usaco2007 Dec 奶牛的旅行 题目描述 作为对奶牛们辛勤工作的回报,Farmer John决定带她们去附近的大城市玩一天.旅行的前夜,奶牛们在兴奋地讨论如何最好地享受这难得 ...

  6. 【bzoj1690】[Usaco2007 Dec]奶牛的旅行 分数规划+Spfa

    题目描述 作为对奶牛们辛勤工作的回报,Farmer John决定带她们去附近的大城市玩一天.旅行的前夜,奶牛们在兴奋地讨论如何最好地享受这难得的闲暇. 很幸运地,奶牛们找到了一张详细的城市地图,上面标 ...

  7. BZOJ 1692: [Usaco2007 Dec]队列变换( 贪心 )

    数据 n <= 30000 , 然后 O( n² ) 的贪心也过了..... USACO 数据是有多弱啊 = = ( ps : BZOJ 1640 和此题一模一样 , 双倍经验 ) ------ ...

  8. BZOJ 1691: [Usaco2007 Dec]挑剔的美食家( 平衡树 )

    按鲜嫩程度排个序, 从大到小处理, 用平衡树维护价值 ---------------------------------------------------------------------- #i ...

  9. bzoj 1691: [Usaco2007 Dec]挑剔的美食家(multiset贪心)

    1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 879  Solved: 445 [Submit] ...

最新文章

  1. -bash: 未预期的符号 `(' 附近有语法错误
  2. Linux 平台安装 Oracle Timesten
  3. 2019年3月未来教育计算机二级题库,2019年3月计算机二Access考试操作模拟试题001...
  4. spring mvc学习(22):/textpath/*/helen
  5. 程序一旦发觉写得不理想,那就得重构它
  6. Unity-failed to update unity web player
  7. 【Redis】Redis各个版本的下载安装教程
  8. 快速增加闲鱼浏览量,就靠这些方法
  9. 解决password自动填充问题
  10. 基于局部平面拟合的法向估计
  11. C的函数 gotoxy()
  12. libcurl入门之相关接口函数curl_easy_setopt
  13. windows操作系统死机代码及其含义解剖
  14. 三星手机 SM-G9730 ROM包
  15. 关于新闻类应用快速开发框架的思考
  16. python 文件时间戳_在Python中每小时将时间戳记写入文件
  17. 我们参与投资36Kr股权众筹项目“易途8”的决策过程
  18. SCS【14】单细胞调节网络推理和聚类 (SCENIC)
  19. mysql学习笔记之连接查询与子查询
  20. razer鼠标测试软件,经典重生 Razer Boomslang限量收藏版测试

热门文章

  1. lammps模拟喷丸过程
  2. 用jQuery实现轮播图效果(自动播放,能手动切换)
  3. SSD目标检测 原理详解
  4. angular5项目下利用router navigate实现页面跳转
  5. 想要快速入门自媒体,这些自媒体运营方法一定要知道
  6. HttpServlet 会话管理(一)(URL重写 表单隐藏域 简单示例)
  7. 每日学术速递5.29
  8. Ant design Pro of vue 实战一
  9. HIVE全部函数详解
  10. 华为鸿蒙开源,OPPO公关粗鄙言论将自己置于舆论风暴中