奶牛的旅行 poj 3621 0-1分数规划
来源:互联网 发布:java运行命令行参数 编辑:程序博客网 时间:2024/05/20 18:03
题目大意
n点m边有向图,点有点权,边有边权,奶牛想要从某点出发,走一些路使得经过的点权和除以(浮点数除法)边权和最大,求这个小数(保留两位)。n≤1000,m=5000。
分析
之前有一道差不多的题目——小澳的葫芦
都是01分数规划
首先答案一定是在一个简单环上的,所以可以把点权转换成边权。
二分答案+spfa判环
code
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue>using namespace std; const int maxn=1010,maxm=5010; const double eps=1e-5; int n,m,edge_m;double ans=0.0,mid,dis[maxn];int vis[maxn],v[maxn], vv[maxn]; struct arr{ int x,y,w,next;}edge[maxm];int ls[maxn];int flag[maxn];void add(int x,int y,int w){ edge[++edge_m]=(arr){x,y,w,ls[x]},ls[x]=edge_m;} int spfa(int s){ memset(dis,254,sizeof(dis)); memset(v,0,sizeof(v)); memset(flag,0,sizeof(flag)); queue<int> q; q.push(s); dis[s]=0; v[s]=1; vv[s]=1; do{ int x=q.front(); q.pop(); for (int y=ls[x];y;y=edge[y].next) { double val=vis[edge[y].y]-mid*edge[y].w; if ((dis[edge[y].y]<dis[x]+val)) { flag[edge[y].y]++; if (flag[edge[y].y]>n) return true; dis[edge[y].y]=dis[x]+val; if (!v[edge[y].y]) { vv[edge[y].y]=1; v[edge[y].y]=1; q.push(edge[y].y); } } } v[x]=0; }while (!q.empty()); return false;} int x,y,z;int check(){ memset(vv,0,sizeof(vv)); for (int i=1;i<=n;i++) if (!vv[i]) { if (spfa(i)) return true; } return false;}int main(){ scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) scanf("%d",&vis[i]); for (int i=1;i<=m;i++) scanf("%d%d%d",&x,&y,&z),add(x,y,z); double l=0.0,r=1000.0;mid=(l+r)/2.0; while (r-l>eps){ if (check()) ans=mid,l=mid; else r=mid; mid=(l+r)/2.0; } printf("%.2f\n",ans); return 0; }
阅读全文
0 0
- 奶牛的旅行 poj 3621 0-1分数规划
- 【bzoj1690】【Usaco2007 Dec】【奶牛的旅行】【分数规划】
- 【BZOJ1690】【Usaco2007 Dec】奶牛的旅行 分数规划 判断负环
- bzoj1690[Usaco2007 Dec]奶牛的旅行 01分数规划+spfa(最优比率环)
- bzoj 1690: [Usaco2007 Dec]奶牛的旅行(01分数规划--最优比率环)
- POJ 3621(0/1分数规划,二分) Sightseeing Cows
- 【poj 2018】0/1分数规划[1]
- POJ 2976 0-1分数规划入门
- 0-1分数规划
- 0-1分数规划
- 0-1分数规划
- 0---1 分数规划
- [POJ 2976]Dropping tests(0-1分数规划)
- POJ 2728 Desert King 0-1分数规划
- poj 2976 Dropping tests 【0-1分数规划】
- POJ 3111 - K Best(0/1分数规划)
- poj -- 2976 【基本0--1 分数规划题】
- 0 1分数规划的Dinkelbach算法...
- 蓝创十周年庆,感恩有您陪伴
- 递归计算非波那契列的通项f(n)
- 深机笔记
- eclipse 中 angular指令在页面中显示 Undefined attribute name (ng-model)
- Effective Modern C++ Item 3
- 奶牛的旅行 poj 3621 0-1分数规划
- 多相机全景的技术介绍
- Binary Tree Level Order Traversal问题及解法
- JavaScript 事件
- The cryptopals crypto challenges——Set 1-1
- 张家界游玩攻略
- Python之scikit-learn01--决策树
- bzoj 3281: 小P的烦恼 支配树算法+dp
- 注册登录时输入11位手机号,不能输入字母和特殊字符,input number类型去掉上下加减箭头