题意:

L个点,P边的点边带权的有向图,求一个环点权和与边权和比值的最大值。

题解:

01分数规划+判负环
详细看这里

还是套用01分数规划模型,点权为value[i],边权为cost[u],一个环为C,问题要求最大化

最小化就是符号倒过来
和之前一样处理,设当前答案为r,设边权为dis[i] = r * ∑cost[i] - ∑value[i]
如果r < r *,则说明至少存在一个环,d[i] < 0,也就是存在负权回环,边权值并不是提前算好,而是在更新路径的时候从哪个点访问到这个边的就将这条边设为相应点权与边权的对应值
如果r > r * ,则不存在负环
判负环一半用spfa,方法:一个点不能入队n次,否则有负环;一条最短路径长度不能到n,否则有负环。貌似后者更快

代码:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
#define N 1005
#define E 5005const double eps=1e-6;
int n,m,x,y;
int tot,point[N],nxt[E],v[E];double c[E];
double val[N],e[E],ans;
double dis[N];
int cnt[N];bool vis[N];
int q[N];void add(int x,int y)
{++tot; nxt[tot]=point[x]; point[x]=tot; v[tot]=y;
}
bool spfa()
{memset(dis,0,sizeof(dis));memset(vis,0,sizeof(vis));;memset(cnt,0,sizeof(cnt));int head=0,tail=0;for (int i=1;i<=n;++i){vis[i]=1;++cnt[i];q[(++tail)%n]=i;}while (head!=tail){int now=q[(++head)%n];vis[now]=0;for (int i=point[now];i;i=nxt[i])if (dis[v[i]]<dis[now]+c[i]){dis[v[i]]=dis[now]+c[i];if (!vis[v[i]]){vis[v[i]]=1;++cnt[v[i]];if (cnt[v[i]]>n) return true;q[(++tail)%n]=v[i];}}}return false;
}
bool check(double L)
{for (int i=1;i<=tot;++i)c[i]=val[v[i]]-L*e[i];return spfa();
}
double find()
{double l=0.0,r=1e4,mid,ans=0.0;while (r-l>eps){mid=(l+r)/2.0;if (check(mid)) ans=l=mid;else r=mid;}return ans;
}
int main()
{scanf("%d%d",&n,&m);for (int i=1;i<=n;++i) scanf("%lf",&val[i]);for (int i=1;i<=m;++i){scanf("%d%d%lf",&x,&y,&e[i]);add(x,y);}ans=find();printf("%.2lf\n",ans);
}

Sightseeing Cows POJ - 3621相关推荐

  1. POJ 2481 Cows POJ 2352 Stars(树状数组妙用)

    题目链接:POJ 2481 Cows POJ 2352 Stars 发现这两个题目都跟求逆序数有着异曲同工之妙,通过向树状数组中插入点的位置,赋值为1,或者++,然后通过求和来判断比当前 点 &quo ...

  2. 动态规划训练20 [Treats for the Cows POJ - 3186 ]

    Treats for the Cows POJ - 3186 简单的区间DP,就不解释了. #include<iostream> #include<cstdio> using ...

  3. poj 3621 Sightseeing Cows 01分数规划

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

  4. POJ 3621:Sightseeing Cows(最优比率环)

    http://poj.org/problem?id=3621 题意:有n个点m条有向边,每个点有一个点权val[i],边有边权w(i, j).找一个环使得Σ(val) / Σ(w)最大,并输出. 思路 ...

  5. POJ 3621 Sightseeing Cows

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

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

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

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

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

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

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

  9. Lost Cows POJ - 2182(线段树)

    N (2 <= N <= 8,000) cows have unique brands in the range 1-N. In a spectacular display of poor ...

最新文章

  1. mysql注册数据库_基于mysql数据库的注册
  2. css伪类与伪元素区别
  3. c++ string replace_Java——String类的常用方法总结
  4. 广州技术沙龙第 4 期报名开始!
  5. python日志内容存储到文件里_Python中如何实现将logging日志保存到文件中
  6. 《光棍节程序员闯关秀》闯关攻略
  7. 使用AutoMapper 处理DTO数据对象的转换
  8. 哈弗f5i潮配置参数_10万元起售的潮人新玩法,哈弗F5国潮版购车手册
  9. js基础---js组成以及基本认知
  10. 7种方法让你养出干净的肺
  11. 函数式编程 -- 函子(Functor)
  12. 2019年中科院JCR分区表公布!附完整Excel下载地址
  13. 拼多多Java面试题、笔试题(含答案)
  14. 浪曦云团的博客正式入驻CSDN
  15. 如何设置ddns动态域名服务实现外网访问
  16. 如何使用FLASHGOT下载网页FLASH
  17. 使用regexp_extract、regexp_replace函数过滤特殊字符时,不同的执行情境下(hive -e;hive -f),正则表达式的内容有变化
  18. 求三个字符串的最长公共子序列LCS(A,B,C)
  19. 2020下半年教师资格证《幼儿综合素质》真题及答案
  20. 启动openoffice命令

热门文章

  1. 颜宁分享干货:给实验室博士的一些忠告
  2. Mysql修改字段名和长度_mysql中修改表字段名/字段长度/字段类型详解
  3. php smtp验证,php通过smtp验证登陆
  4. 最近有粉丝向我请教Java泛型,于是重温了一下,希望学弟面试顺利
  5. mysql innodb事务中_MySQL InnoDB如何保证事务特性示例详解
  6. php显示前60个字,DEDECMS中怎么让文章标题栏突破60个字符
  7. linq查询不包含某个值的记录_【翻译】C#表达式中的动态查询
  8. 新增一个主键自增长_MyBatis 示例-主键回填
  9. php 结构体_php基础知识集合
  10. gre考试能用计算机么,新GRE考试必须知道的九大考场问题