poj3621 Sightseeing Cows --- 01分数规划
典型的求最优比例环问题
參考资料:
http://blog.csdn.net/hhaile/article/details/8883652
此题中,给出每一个点和每条边的权值,求一个环使 ans=∑点权/∑边权 最大。
由于题目要求一个环,并且必定是首尾相接的一个我们理解的纯粹的环,不可能是其它样子的环,
所以我们能够把一条边和指向的点看做总体处理。
上面方程能够化为:ans×e[i]-p[i]=0
以它为边权二分答案,spfa求负环,有负环则该ans可行,增大下界。
若一直不可行,则无解。
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<iostream>
#include<algorithm>
#include<cmath>
#define inf 0x3f3f3f3f
using namespace std;
#define N 1010
#define M 5010struct node
{int next,v,w;
}e[M];
int n,m,h,head[N],p[N],inq[N],outq[N];
double d[N];void addedge(int a,int b,int c)
{e[h].v=b;e[h].w=c;e[h].next=head[a];head[a]=h++;
}bool spfa(int s,double ans)
{int i,cnt=0;for(i=0;i<=n;i++)d[i]=2000000000;memset(inq,0,sizeof inq);memset(outq,0,sizeof outq);d[s]=0;inq[s]=1;queue<int> q;q.push(s);while(!q.empty()){int x=q.front();q.pop();inq[x]=0;outq[x]++;cnt++;if(outq[x]>n) return 0;if(cnt>(n+m)<<1) return 0;for(i=head[x];i!=-1;i=e[i].next){int v=e[i].v;if(d[v]>d[x]+ans*e[i].w-p[v]){d[v]=d[x]+ans*e[i].w-p[v];if(!inq[v])q.push(v);}}}return 1;
}int main()
{int a,b,c,i;double le,ri,mid;while(~scanf("%d%d",&n,&m)){memset(head,-1,sizeof head);h=0;for(i=1;i<=n;i++)scanf("%d",&p[i]);for(i=0;i<m;i++){scanf("%d%d%d",&a,&b,&c);addedge(a,b,c);}le=0;ri=1010;double ans=0;while(ri-le>1e-5){mid=(le+ri)/2.0;if(spfa(1,mid)){ri=mid;}else{ans=mid;le=mid;}}printf("%.2lf\n",ans);//G++要用%f才干A}return 0;
}
转载于:https://www.cnblogs.com/mengfanrong/p/3918968.html
poj3621 Sightseeing Cows --- 01分数规划相关推荐
- poj 3621 Sightseeing Cows 01分数规划
题目大意: http://poj.org/problem?id=3621 题解: 首先我们容易发现最优的路线一定只经过一个环. 所以我们可以把点权合并到边权上. 然后就转化为了一个01分数规划问题 求 ...
- POJ-3621 Sightseeing Cows 最优比率环、01分数规划
题目链接:http://poj.org/problem?id=3621 这题是01分数规划问题,详细资料点这里.有了01分数规划的基础后,这个题目就很简单了.构建函数f(mid)=Σ(w[i]-mid ...
- 分治 —— 01 分数规划
[概述] 分数规划的一般形式为: 特别的,当 时,称为 01 分数规划 简单来说,就是有一些二元组 (a[i],b[i]),现在从中选择某些二元组,使得 最大或最小 这一类题通用的解法是利用二分法 ...
- 转载二分 01 分数规划即最大化平均值的证明0/1分数规划、最优比率生成树、最优比率环
首页 新随笔 联系 管理 订阅 随笔- 20 文章- 0 评论- 9 [Algorithm]01分数规划--Update:2012年7月27日 [关键字] 0/1分数规划.最优比率生成树.最优比率 ...
- 【转】0-1分数规划等问题
[关键字] 0/1分数规划.最优比率生成树.最优比率环 [背景] 根据楼教主的回忆录,他曾经在某一场比赛中秒掉了一道最优比率生成树问题,导致很多人跟风失败,最终悲剧.可见最优比率生成树是多么凶残的东西 ...
- [Algorithm]01分数规划
[关键字] 0/1分数规划.最优比率生成树.最优比率环 [背景] 根据楼教主的回忆录,他曾经在某一场比赛中秒掉了一道最优比率生成树问题,导致很多人跟风失败,最终悲剧.可见最优比率生成树是多么凶残的东西 ...
- 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) ...
- 解题报告:AcWing 1165. 单词环(01分数规划、hash、经验优化)
本题的关键在于: 建图 01分数规划 本题的数据过大,如果直接spfa判断会TLE,因此我们使用经验优化,就是如果所有的点入队的次数过多,比如大于100000,那么我们直接认为它是存在正环的.(免去T ...
最新文章
- 普罗米修斯 监控_完美的分布式监控系统——普罗米修斯
- 云原生时代,Kubernetes让应用落地的N种招式(附PPT)
- 深入理解 Linux Cgroup 系列(二):玩转 CPU
- eclipce如何配置mysql_如何在eclipse配置mysql数据库
- python绘制灰度图片直方图-python – numpy图像中灰度值的直方图
- java 获取计算机内存
- 创建一个dynamics 365 CRM online plugin (一) - Hello World Plugin
- ts-node 学习笔记 - 如何解决在 Windows10 下不能直接运行 ts-node 的问题
- python getattr_Python 内置方法和属性应用:反射和单例
- activemq 开启监听_SpringBoot集成ActiveMQ怎么实现Topic发布/订阅模式通信?
- 看了这个有趣的例子,你就能秒懂Java中的多线程同步了!
- 880 芯片组 服务器 cpu,顶级双核处理器对决 皓龙880完胜至强
- 2015年C语言组混搭 C/C++
- dbMigration .NET 数据同步迁移工具
- Asp.net MVC2使用第三方控件
- caffe中pad的作用
- response设置token
- Githup上第三方控件的地址收藏
- JAVA项目:后台管理页面——显示数据库中所有信息+删除和编辑(MySQL)
- kong网关安装与启动