题目链接:http://poj.org/problem?id=3621

  这题是01分数规划问题,详细资料点这里。有了01分数规划的基础后,这个题目就很简单了。构建函数f(mid)=Σ(w[i]-mid*d[i]),然后二分mid,如果图中有正权环,则f(mid)>0,则还有更优解l=mid,否则r=mid。

 1 //STATUS:C++_AC_563MS_296KB
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 #include<string.h>
 5 #include<math.h>
 6 #include<iostream>
 7 #include<string>
 8 #include<algorithm>
 9 #include<vector>
10 #include<queue>
11 #include<stack>
12 using namespace std;
13 #define LL __int64
14 #define pii pair<int,int>
15 #define Max(a,b) ((a)>(b)?(a):(b))
16 #define Min(a,b) ((a)<(b)?(a):(b))
17 #define mem(a,b) memset(a,b,sizeof(a))
18 #define lson l,mid,rt<<1
19 #define rson mid+1,r,rt<<1|1
20 const int N=1010,M=1000000,INF=0x3f3f3f3f,MOD=1999997;
21 const LL LLNF=0x3f3f3f3f3f3f3f3fLL;
22 const double DNF=100000000;
23
24 struct Edge{
25     int u,v,w;
26 }e[5*N];
27 double d[N];
28 int w[N],inq[N],first[N],next[5*N],cou[N];
29 int n,m,mt;
30
31 void adde(int a,int b,int c)
32 {
33     e[mt].u=a,e[mt].v=b,e[mt].w=c;
34     next[mt]=first[a],first[a]=mt++;
35 }
36
37 int SPFA(int s,double mid)
38 {
39     int i,j,u,v;
40     queue<int> q;
41     for(i=1;i<=n;i++)d[i]=-DNF;d[s]=0;
42     mem(inq,0);mem(cou,0);
43     q.push(s);
44     while(!q.empty()){
45         u=q.front();q.pop();
46         inq[u]=0;
47         for(i=first[u];i!=-1;i=next[i]){
48             v=e[i].v;
49             if(d[u]+w[u]-e[i].w*mid>d[v]){
50                 d[v]=d[u]+w[u]-e[i].w*mid;
51                 if(!inq[v]){
52                     inq[v]=1;
53                     if(++cou[v]==n)return 1;
54                     q.push(v);
55                 }
56             }
57         }
58     }
59     return 0;
60 }
61
62 double binary()
63 {
64     double l=0,r=1000,mid;
65     while(r-l>1e-3){
66         mid=l+(r-l)/2;
67         if(SPFA(1,mid)>0)l=mid;
68         else r=mid;
69     }
70     return mid;
71 }
72
73 int main()
74 {
75   //  freopen("in.txt","r",stdin);
76     int i,j,a,b,c;
77     while(~scanf("%d%d",&n,&m))
78     {
79         mt=0;
80         mem(first,-1);
81         for(i=1;i<=n;i++)
82             scanf("%d",&w[i]);
83         for(i=0;i<m;i++){
84             scanf("%d%d%d",&a,&b,&c);
85             adde(a,b,c);
86         }
87
88         printf("%.2lf\n",binary());
89     }
90     return 0;
91 }

转载于:https://www.cnblogs.com/zhsl/archive/2013/01/29/2881626.html

POJ-3621 Sightseeing Cows 最优比率环、01分数规划相关推荐

  1. POJ 3621 Sightseeing Cows [最优比率环]

    感觉去年9月的自己好$naive$ http://www.cnblogs.com/candy99/p/5868948.html 现在不也是嘛 裸题,具体看学习笔记 二分答案之后判负环就行了 $dfs$ ...

  2. poj 2728 Desert King(最小比率生成树 / 0-1分数规划 / 二分)

    二分答案,我们要找最小的答案,如果有更小的答案说明 ∑W−Z∗∑L<=0∑W−Z∗∑L <= 0∑W−Z∗∑L<=0. #include<cstdio> #include ...

  3. poj 3621 Sightseeing Cows 01分数规划

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

  4. POJ 3621 Sightseeing Cows

    SPFA+0/1分数规划. CODE: #include <iostream> #include <cstdlib> #include <cstdio> #incl ...

  5. POJ 3621 Sightseeing Cows(最优比率环+spfa的dfs判环优化)

    题目链接 题目大意:给你一个有向图,每个点都有一个权值,每条边都有一个长度,需要找到一个各点权值和/各边长度和 最大的环出来,输出这个比值. 分析:假设结点权值为wiw_iwi​,边的长度为lil_i ...

  6. POJ-2728 Desert King 最优比例生成树 01分数规划/参数搜索

    题意:给定N个三维平面点,每个点都有一个高度,每两个点之间的需要构边,边的距离由x,y坐标的欧几里得距离确定,边的花费有点的高度差即z值确定,现在问一个合理的生成树中,花费比上距离的最小值为多少? 解 ...

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

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

  8. poj 2976 Dropping tests 01分数规划

    题目大意: http://poj.org/problem?id=2976 题解: 裸的01分数规划 #include <cstdio> #include <cstring> # ...

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

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

最新文章

  1. 银监会警示担保圈贷款风险 联保贷款变异 防多米诺效应
  2. MTK方案下tee.img的打包方式的详细拆解
  3. linux pdf转换swf,CENTOS 5   PDF转换为SWF
  4. visual studio无法更新_微软发布 VS Code Python 四月更新
  5. 判别测试字段怎么算它的位数_心理测试 | 成人依恋量表-亲密关系经历量表ECR...
  6. mysql binlog redo_mysql的binlog与redo log
  7. 宏定义 #define 和常量 const 的区别
  8. JAVA 雪花算法 唯一ID生成工具类
  9. 洛谷P1182 数列分段 Section II(二分+贪心)
  10. android各个版本市场占有率(2013年3月)
  11. Mac触发角(Hot Corners) 进阶技巧
  12. 信道模型时延和路径增益:cost207,cost2100,cost259,cost273,SCM,I-METRA,WINNER II
  13. 《深入理解nginx》总结
  14. java udp判断端口是否打开,java udp 端口
  15. 再遇soundmix.dll,小试pe_xscan
  16. POI导出echarts统计报表到Excel
  17. tenacity -- Python中一个专门用来retry的库
  18. MIX2 适配看这一篇就够了,18:9 只需一行代码
  19. android 开游艇游戏,游艇狂飙游戏-游艇狂飙安卓版预约_第一手游网
  20. 花青素类荧光染料Sulfo-Cy3.5 NH2,Sulfo-Cyanine3.5 amine,磺酸基-花青素Cyanine3.5 氨基,可以用来标记蛋白

热门文章

  1. Spring Boot 如何快速改造老项目?
  2. Google MapReduce有啥巧妙优化?
  3. Linux 还能这么玩,10 个非常有趣的命令!
  4. 让面试官颤抖的 HTTP 2.0 协议面试题
  5. Collections.sort()自定义排序方式
  6. 数据库事务隔离技术之 Next-Key Locks
  7. 全面总结:进程与线程
  8. Java 多态中成员变量与成员属性的特点【复习】
  9. php升级的痛苦,升级 PHP 7.4 带来的两个大坑
  10. bootstrap获取表格中选中行的值_这才是No.1的Excel表格核对技巧