bzoj1690[Usaco2007 Dec]奶牛的旅行 01分数规划+spfa(最优比率环)
来源:互联网 发布:软件测试条件逻辑 编辑:程序博客网 时间:2024/06/05 06:23
题意:给你一幅图,点上有收益,边上有花费,让你走过一段路,使得收益和/花费和最大。。
一开始各种奇怪方法上,因为从来没做过01分数规划= =。。
其中看起来最像正解的应该是spfa的时候两个一起更新,把花费和收益都搞到边上去,但是sb的我没有发现,题目要求是一个环!!!!!!!!!!!
01分数规划也不是很难,推荐一篇讲的很好的文章。
http://www.cnblogs.com/perseawe/archive/2012/05/03/01fsgh.html
然后其实就是最优比率环了,把d[i]赋值到边上去,然后直接做spfa(最长路)啊,
#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<cmath>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace std;int n, m;const int N = 3e5 + 5;unsigned int read(){ unsigned int x = 0, f = 1; char ch = getchar(); while (ch<'0' || ch>'9') { if (ch == '-')f = -1; ch = getchar(); } while (ch >= '0'&&ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); } return x*f;}typedef double db;const db eps = 1e-5;int tot;db mid;db dis[N],ans;bool vis[N];int head[N], nxt[N], go[N], val[N], a[N];inline void add(int x, int y, int z){ go[++tot] = y; nxt[tot] = head[x]; val[tot] = z; head[x] = tot;}inline bool spfa(int x){ vis[x] = 1; for (int i = head[x]; i; i = nxt[i]) { int v = go[i]; db value = a[v] - mid*val[i]; if (dis[v]<dis[x]+value) { if (!vis[v]) { dis[v] = dis[x] + value; if (spfa(v))return 1; } else return 1; } } return vis[x]=0;//不成功的点注意退回标记}int main(){ n = read(); m = read(); fo(i, 1, n)a[i] = read(); fo(i, 1, m) { int x=read(),y=read(),z=read(); add(x, y, z); } db l = 0.0, r = 1000.0; while (r - l > eps) { memset(dis, 254, sizeof(dis));//填的是负数 memset(vis, 0, sizeof(vis)); dis[1] = 0.0; mid = (l + r) / 2.0; if (spfa(1))ans = mid, l = mid; else r = mid; } printf("%.2lf\n", ans);}
阅读全文
0 0
- bzoj1690[Usaco2007 Dec]奶牛的旅行 01分数规划+spfa(最优比率环)
- bzoj1690 [Usaco2007 Dec]奶牛的旅行(最优比率环,二分答案+spfa判负环)
- bzoj 1690: [Usaco2007 Dec]奶牛的旅行(01分数规划--最优比率环)
- 【bzoj1690】【Usaco2007 Dec】【奶牛的旅行】【分数规划】
- 【BZOJ1690】【Usaco2007 Dec】奶牛的旅行 分数规划 判断负环
- bzoj1690 [Usaco2007 Dec]奶牛的旅行
- bzoj1690/poj3621[Usaco2007 Dec]奶牛的旅行
- 【bzoj1690】[Usaco2007 Dec]奶牛的旅行
- bzoj 1690: [Usaco2007 Dec]奶牛的旅行 spfa+二分答案
- 01分数规划【最优比率环】--poj3621
- BZOJ 1690: [Usaco2007 Dec]奶牛的旅行
- 【BZOJ 1690】 [Usaco2007 Dec]奶牛的旅行
- 1690: [Usaco2007 Dec]奶牛的旅行
- bzoj 1690: [Usaco2007 Dec]奶牛的旅行
- 1690: [Usaco2007 Dec]奶牛的旅行
- [01分数规划]分数规划,最优比率生成树,最优比率生成环
- POJ 3621 最优比率生成环 01分数规划问题
- poj 3621 Sightseeing Cows (最优比率生成环 01分数规划问题 )
- 求最小公倍数
- Android7.0中文文档(API)-- SimpleAdapter
- VS2015使用C#6.0中的那些新特性
- 5-1 正整数A+B (15分)
- Bone Collector II
- bzoj1690[Usaco2007 Dec]奶牛的旅行 01分数规划+spfa(最优比率环)
- 集合总结
- 关于Quartus ||13.0运行过程中许可证不支持芯片的问题
- 企业模板:网络公司网站整站织梦模板
- 【VS开发】【视频开发】利用ffmpeg+opencv实现画中画
- Java设计模式之统一建模语言UML
- CDN
- FFmpeg滤镜使用指南
- CRC校验