典型的求最优比例环问题

參考资料:

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分数规划相关推荐

  1. poj 3621 Sightseeing Cows 01分数规划

    题目大意: http://poj.org/problem?id=3621 题解: 首先我们容易发现最优的路线一定只经过一个环. 所以我们可以把点权合并到边权上. 然后就转化为了一个01分数规划问题 求 ...

  2. POJ-3621 Sightseeing Cows 最优比率环、01分数规划

    题目链接:http://poj.org/problem?id=3621 这题是01分数规划问题,详细资料点这里.有了01分数规划的基础后,这个题目就很简单了.构建函数f(mid)=Σ(w[i]-mid ...

  3. 分治 —— 01 分数规划

    [概述] 分数规划的一般形式为: 特别的,当  时,称为 01 分数规划 简单来说,就是有一些二元组 (a[i],b[i]),现在从中选择某些二元组,使得  最大或最小 这一类题通用的解法是利用二分法 ...

  4. 转载二分 01 分数规划即最大化平均值的证明0/1分数规划、最优比率生成树、最优比率环

    首页 新随笔 联系 管理 订阅 随笔- 20  文章- 0  评论- 9 [Algorithm]01分数规划--Update:2012年7月27日 [关键字] 0/1分数规划.最优比率生成树.最优比率 ...

  5. 【转】0-1分数规划等问题

    [关键字] 0/1分数规划.最优比率生成树.最优比率环 [背景] 根据楼教主的回忆录,他曾经在某一场比赛中秒掉了一道最优比率生成树问题,导致很多人跟风失败,最终悲剧.可见最优比率生成树是多么凶残的东西 ...

  6. [Algorithm]01分数规划

    [关键字] 0/1分数规划.最优比率生成树.最优比率环 [背景] 根据楼教主的回忆录,他曾经在某一场比赛中秒掉了一道最优比率生成树问题,导致很多人跟风失败,最终悲剧.可见最优比率生成树是多么凶残的东西 ...

  7. poj2976(0-1分数规划)

    0-1分数规划 设x[i]等于1或0. 则我们所求的比率 rate = ∑(cost[i] * x[i]) / ∑(cost[i] * x[i]), 0≤i<m . z( rate ) = ∑( ...

  8. 点分治问题 ----------- luoguP2942 [WC2010]重建计划 [点分治 + bfs + 单调队列 + 预处理建树 + 二分 + 01分数规划]

    题目链接 解题思路: 1.对于这个Avgvalue=∑e∈sv(e)∣s∣Avgvalue = \frac{\sum_{e\in s}v(e)}{|s|}Avgvalue=∣s∣∑e∈s​v(e)​ ...

  9. 解题报告:AcWing 1165. 单词环(01分数规划、hash、经验优化)

    本题的关键在于: 建图 01分数规划 本题的数据过大,如果直接spfa判断会TLE,因此我们使用经验优化,就是如果所有的点入队的次数过多,比如大于100000,那么我们直接认为它是存在正环的.(免去T ...

最新文章

  1. 普罗米修斯 监控_完美的分布式监控系统——普罗米修斯
  2. 云原生时代,Kubernetes让应用落地的N种招式(附PPT)
  3. 深入理解 Linux Cgroup 系列(二):玩转 CPU
  4. eclipce如何配置mysql_如何在eclipse配置mysql数据库
  5. python绘制灰度图片直方图-python – numpy图像中灰度值的直方图
  6. java 获取计算机内存
  7. 创建一个dynamics 365 CRM online plugin (一) - Hello World Plugin
  8. ts-node 学习笔记 - 如何解决在 Windows10 下不能直接运行 ts-node 的问题
  9. python getattr_Python 内置方法和属性应用:反射和单例
  10. activemq 开启监听_SpringBoot集成ActiveMQ怎么实现Topic发布/订阅模式通信?
  11. 看了这个有趣的例子,你就能秒懂Java中的多线程同步了!
  12. 880 芯片组 服务器 cpu,顶级双核处理器对决 皓龙880完胜至强
  13. 2015年C语言组混搭 C/C++
  14. dbMigration .NET 数据同步迁移工具
  15. Asp.net MVC2使用第三方控件
  16. caffe中pad的作用
  17. response设置token
  18. Githup上第三方控件的地址收藏
  19. JAVA项目:后台管理页面——显示数据库中所有信息+删除和编辑(MySQL)
  20. kong网关安装与启动

热门文章

  1. 网络技术温故知新(一)
  2. linux各版本使用率,Windows10系统各版本份额出炉:十月更新占有率不高。
  3. java 并发实例_java一些常用并发工具示例
  4. FPGA基于双端口RAM的乒乓操作
  5. 用Excel画五线谱!
  6. 虚拟机下Linux安装图解之二:虚拟机的创建
  7. Django—Model就是ORM的具体体现
  8. python 迭代器 生成器 解析
  9. 教你怎么样在 Java8 中优雅的避开空指针异常
  10. vsftpd服务安装与虚拟用户配置