UVA11090 Going in Cycle!!

二分答案,用spfa判负环

注意格式;图不一定连通。

复杂度$O(nmlog(maxw-minw))$

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#define re register
using namespace std;
typedef double db;
const db eps=1e-;
#define N 100
#define M 20000
int n,m,t,ri[N]; db d[N],val[M<<]; bool inh[N],vis[N];
int cnt,hd[M],nxt[M<<],ed[M],poi[M];
void adde(int x,int y,db v){
nxt[ed[x]]=++cnt; hd[x]=hd[x]?hd[x]:cnt;
ed[x]=cnt; poi[cnt]=y; val[cnt]=v;
}
bool spfa(int st,db lim){
memset(d,,sizeof(d));
memset(inh,,sizeof(inh));
memset(ri,,sizeof(ri));
queue<int> h; h.push(st);
inh[st]=; d[st]=; vis[st]=;
while(!h.empty()){
int x=h.front(); h.pop();
inh[x]=;
for(int i=hd[x];i;i=nxt[i]){
int to=poi[i];
if(d[x]+val[i]-lim<d[to]){
d[to]=d[x]+val[i]-lim;
ri[to]=ri[x]+; vis[to]=;
if(ri[to]>=n) return ;//出现次数>=n则有环
if(!inh[to])
inh[to]=,h.push(to);
}
}
}return ;
}
bool check(db lim){
memset(vis,,sizeof(vis));
bool ok=;
for(re int i=;i<=n&&!ok;++i)
if(!vis[i]) ok|=spfa(i,lim);
return ok;
}
int main(){
scanf("%d",&t); int q1,q2;db q3;
for(int w=;w<=t;++w){
memset(hd,,sizeof(hd)); cnt=;
memset(nxt,,sizeof(nxt));
memset(ed,,sizeof(ed));
scanf("%d%d",&n,&m);
db l=1e8,r=-1e8;
for(re int i=;i<=m;++i){
scanf("%d%d%lf",&q1,&q2,&q3);
adde(q1,q2,q3);
l=min(q3,l);
r=max(q3,r);
}printf("Case #%d: ",w);
if(!check(r+))//如果减去最大边+1仍无负环,这个图就是无环图
{printf("No cycle found.\n"); continue;}
while(fabs(r-l)>eps){//二分
db mid=(l+r)/2.0;
if(check(mid)) r=mid;
else l=mid;
}printf("%.2lf\n",l);
}return ;
}

UVA11090 Going in Cycle!!(二分判负环)的更多相关文章

  1. 训练指南 UVA - 11090(最短路BellmanFord+ 二分判负环)

    layout: post title: 训练指南 UVA - 11090(最短路BellmanFord+ 二分判负环) author: "luowentaoaa" catalog: ...

  2. UVA11090 Going in Cycle (二分+判负环)

    二分法+spfa判负环.如果存在一个环sum(wi)<k*x,i=0,1,2...,k,那么每条边减去x以后会形成负环.因此可用spfa来判负环. 一般spfa判负环dfs最快,用stack次之 ...

  3. BZOJ3597 [Scoi2014]方伯伯运椰子 【二分 + 判负环】

    题目链接 BZOJ3597 题解 orz一眼过去一点思路都没有 既然是流量网络,就要借鉴网络流的思想了 我们先处理一下那个比值,显然是一个分数规划,我们二分一个\(\lambda = \frac{X ...

  4. UVA 11090 Going in Cycle!!(二分答案+判负环)

    在加权有向图中求平均权值最小的回路. 一上手没有思路,看到“回路”,第一想法就是找连通分量,可又是加权图,没什么好思路,那就转换题意:由求回路权值->判负环,求最小值->常用二分答案. 二 ...

  5. poj 3621 二分+spfa判负环

    http://poj.org/problem?id=3621 求一个环的{点权和}除以{边权和},使得那个环在所有环中{点权和}除以{边权和}最大. 0/1整数划分问题 令在一个环里,点权为v[i], ...

  6. poj 2049(二分+spfa判负环)

    poj 2049(二分+spfa判负环) 给你一堆字符串,若字符串x的后两个字符和y的前两个字符相连,那么x可向y连边.问字符串环的平均最小值是多少.1 ≤ n ≤ 100000,有多组数据. 首先根 ...

  7. [APIO2017]商旅——分数优化+floyd+SPFA判负环+二分答案

    题目链接: [APIO2017]商旅 枚举任意两个点$(s,t)$,求出在$s$买入一个物品并在$t$卖出的最大收益. 新建一条从$s$到$t$的边,边权为最大收益,长度为原图从$s$到$t$的最短路 ...

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

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

  9. Poj 3259 Wormholes(spfa判负环)

    Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 42366 Accepted: 15560 传送门 Descr ...

随机推荐

  1. 微信Tinker的一切都在这里,包括源码(一)

    版权声明:本文由张绍文原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/101 来源:腾云阁 https://www.qclo ...

  2. python搭建简易Web Server

    如果你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比如:Apache,ISS等.那么, Python可能帮助你,使用Python可以完成一个简单的内建 HTT ...

  3. vux报错二

    执行npm run build后 "build": "node build/build.js",   // 输出提示信息 - 提示用户请在 http 服务下查看 ...

  4. Linux系统内核main函数执行之前

    1.linux是一个操作系统在机器加电后,需要从硬件通过一个引导程序加载os kernel,那么在os kernel的main函数运行之前,都发生了什么呢? (1)引导BIOS(存储在ROM芯片中,R ...

  5. mysql如何用sql增加字段和注释?

    alter table warn_user_binding add is_valid varchar(10) default 'true' COMMENT '删除标识:true 有效:false 删除 ...

  6. zabbix安装配置2

    1.平台:centos6.5 2.安装epel: yum install http://mirrors.aliyun.com/epel/6/x86_64/epel-release-6-8.noarch ...

  7. .NET获取Html字符串中指定标签的指定属性的值

    using System.Text; using System.Text.RegularExpressions; //以上为要用到的命名空间 /// <summary> /// 获取Htm ...

  8. Online handwriting recognition using multi convolution neural networks

    w可以考虑从计算机的“机械性.重复性”特征去设计“低效的”算法. https://www.codeproject.com/articles/523074/webcontrols/ Online han ...

  9. IntelliJ IDEA 插件

    alibaba java  coding guidelines 阿里巴巴Java编码指南插件支持. Mybatis-log-plugin 把 mybatis 输出的sql日志还原成完整的sql语句. ...

  10. Ubuntu下安装Nginx详细步骤

    Nginx安装之前需要三个支持: 模块依赖性 ①gzip 模块需要 zlib 库 ②rewrite 模块需要 pcre 库 ③ssl 功能需要 openssl 库 预先编译好的包: sudo apt- ...