SPFA找最大比例环#

ans=Σ点权/Σ边权

所以 可以变式为 Σ边权*ans-Σ点权=0

要找出最大的ans 可以二分

边权值变为 目的地点权-ans*边权

检查是否有负环 有则可以更优

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#define CLR(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn = 5010;
const double EPS = 1e-6;
int n,m,val[maxn],from[maxn],to[maxn],w[maxn];
int head[maxn],tol;
int vis[maxn],c[maxn],d[maxn];
double dis[maxn]; struct edge
{
int from,to,next;
double w;
}edge[maxn]; void addedge(int u,int v,double w)
{
edge[tol].from = u;
edge[tol].to = v;
edge[tol].w = w;
edge[tol].next = head[u];
head[u] = tol++;
} void init()
{
CLR(head,-1);
CLR(vis,0);
CLR(c,0);
CLR(d,0);
for(int i = 0; i <= n; i++) dis[i] = 1000001;
tol = 0;
} bool check(double ans)
{
init();
for(int i = 1; i <= m; i++){
int u = from[i];
int v = to[i];
addedge(u,v,(1.0*val[v] - 1.0*w[i]*ans)*-1);
d[u]++;
}
for(int i = 1; i <= n; i++){
if(d[i] == 0) addedge(0,i,0);
}
addedge(0,1,0); queue<int> q;
q.push(0);
dis[0] = 0;
while(!q.empty()){
int u = q.front();
q.pop();
vis[u] = 0; for(int i = head[u]; ~i; i = edge[i].next){
int v = edge[i].to;
double W = edge[i].w;
if(dis[u] + W < dis[v]){
dis[v] = W + dis[u];
if(!vis[v]){
vis[v] = 1;
c[v]++;
if(c[v] > n){
return false;
}
q.push(v);
}
}
}
} return true;
} int main()
{
scanf("%d%d",&n,&m);
for(int i = 1; i <= n; i++) scanf("%d",&val[i]);
for(int i = 1; i <= m; i++){
scanf("%d%d%d",&from[i],&to[i],&w[i]);
} double l = 0;
double r = 1000001; while( r - l > EPS){
double mid = (l + r) / 2;
if(check(mid))
r = mid;
else
l = mid;
} printf("%.2f\n",r); return 0;
}

SPFA找最大比例环的更多相关文章

  1. POJ 3621 Sightseeing Cows(最优比例环+SPFA检测)

    Sightseeing Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10306   Accepted: 3519 ...

  2. SPFA找负环(DFS) luogu3385

    SPFA找负环的基本思路就是如果一个点被访问两次说明成环,如果第二次访问时所用路径比第一次短说明可以通过一直跑这个圈将权值减为负无穷,存在负环 有bfs和dfs两种写法,看了一些博客,在bfs和dfs ...

  3. 递归型SPFA判负环 + 最优比例环 || [Usaco2007 Dec]奶牛的旅行 || BZOJ 1690 || Luogu P2868

    题外话:最近差不多要退役,复赛打完就退役回去认真读文化课. 题面:P2868 [USACO07DEC]观光奶牛Sightseeing Cows 题解:最优比例环 题目实际是要求一个ans,使得对于图中 ...

  4. qbxt的题:找一个三元环

    有向图中找一个三元环 题意: 考虑 N 个人玩一个游戏, 任意两个人之间进行一场游戏 (共 N*(N-1)/2 场),且每场一定能分出胜负.现在,你需要在其中找到三个人构成的这样的局面:A战胜B,B战 ...

  5. POJ 3621 Sightseeing Cows 01分数规划,最优比例环的问题

    http://www.cnblogs.com/wally/p/3228171.html 题解请戳上面 然后对于01规划的总结 1:对于一个表,求最优比例 这种就是每个点位有benefit和cost,这 ...

  6. Poj(3259),SPFA,判负环

    题目链接:http://poj.org/problem?id=3259 Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submis ...

  7. [PHP] 算法-请找出带环链表的环的入口结点的PHP实现

    给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null 1.找链表倒数第k个结点,输入一个链表,输出该链表中倒数第k个结点.第一个指针走(k-1)步,到达第k个节点,两个指针同时往后 ...

  8. HDU 6038 17多校1 Function(找循环节/环)

    Problem Description You are given a permutation a from 0 to n−1 and a permutation b from 0 to m−1. D ...

  9. LightOJ 1074 Extended Traffic(spfa+dfs标记负环上的点)

    题目链接:https://cn.vjudge.net/contest/189021#problem/O 题目大意:有n个站点,每个站点都有一个busyness,从站点A到站点B的花费为(busynes ...

随机推荐

  1. idea+maven+ssm搭建boot_crm项目遇到的问题

    使用idea+maven+ssm搭建一个boot_crm项目,遇到的问题如下: 1.环境搭建好了,相关配置文件都配置好了,也部署到了tomcat,但是无法启动首页. 通过百度,google找到了,原因 ...

  2. Django详细流程

    一.设计表结构 我们以学生管理系统为例,讲解一下Django的基本操作.首先要设计一下表的结构,这里就不多解释 班级表结构: 表名:grades 字段:班级名称 gname 成立时间 gdate 女生 ...

  3. 人工智能-调百度AI接口+图灵机器人

    1.登陆百度AI的官网 1.注册:没有账号注册 2.创建应用 3.创建应用 4.查看应用的ID 5.Python代码 from aip import AipSpeech APP_ID = " ...

  4. CF1139E Maximize Mex

    题目地址:CF1139E Maximize Mex 这其实是一个二分图匹配匈牙利算法的巧妙运用 考虑倒序回答 则由原来的删除改为添加 把 potential 值作为左部,则一共有编号为 \(0~m\) ...

  5. redis更多

    应用场景 存放频繁操作的数据,以及一些无须保存到数据库的中间值 应用: - 配合django做缓存,常用且不易修改的数据放进来(博客) - 购物车信息 - Session - 缓存配置文件 - ses ...

  6. 【原创】大叔经验分享(10)Could not transfer artifact org.apache.maven:maven. from/to central. Received fatal alert: protocol_version

    maven编译工程报错 [ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.2.2:add-source (s ...

  7. 解决jenkins构建job报错“NoClassDefFoundError” in jenkins/scm/RunWithSCM问题

    现象 使用Jenkins 2.8,当我运行一个简单的Jenkins工作时,构建一个job获取源代码,出现下面的错误 FATAL: jenkins/scm/RunWithSCM java.lang.No ...

  8. Python-选择器Xpath,Css,Re

    正则表达式(特殊字符) ^ 开头 '^b.*'----以b开头的任意字符 $ 结尾 '^b.*3$'----以b开头,3结尾的任意字符 * 任意长度(次数),≥0 ? 非贪婪模式,非贪婪模式尽可能少的 ...

  9. linux基础一篇就够了

    Linux学习笔记 粗略笔记第一版,全文约2000行50000字 1. 时间和日历 date:查看当前时间 cal:查看当月日历 cal 2018:查看年日历 cal 10 2018:指定某年某月日历 ...

  10. Linux安装与基本命令

    安装centos镜像 #下载地址https://www.centos.org/download/ http://isoredirect.centos.org/centos/7/isos/x86_64/ ...