题目链接

题意及题解参见lrj训练指南

#include<bits/stdc++.h>
using namespace std; const double INF=1e18;
const int maxn=;
const int maxm=; int n,m;
struct Edge
{
int to,next;
double d;
Edge(){}
Edge(int to_,int next_,double d_)
{
to=to_,next=next_,d=d_;
}
};
Edge edge[maxm];
int head[maxn],tot;
bool inq[maxn];
double d[maxn];
int p[maxn];
int cnt[maxn]; void init()
{
memset(head,-,sizeof(head));
tot=;
}
void addedge(int u,int v,double d)
{
edge[tot]=Edge(v,head[u],d);
head[u]=tot++;
} // 顶点编号0~n-1共n个点
// 返回值表示 从s出发,能否遇到负环
bool spfa(int s,int n)
{
queue<int> Q;
for(int i=;i<n;i++) d[i]=INF;
memset(inq,false,sizeof(inq));
memset(cnt,,sizeof(cnt));
Q.push(s),inq[s]=true,d[s]=;
while(!Q.empty())
{
int u=Q.front();Q.pop();
inq[u]=false;
for(int i=head[u];~i;i=edge[i].next)
{
Edge& e=edge[i];
if(d[e.to]>d[u]+e.d)
{
d[e.to]=d[u]+e.d;
p[e.to]=i;
if(!inq[e.to])
{
Q.push(e.to),inq[e.to]=true;
if(++cnt[e.to]>=n) return true;//存在负环
}
}
}
}
return false; //无负环
} bool ok(double x)
{
for(int i=;i<tot;i++) edge[i].d-=x;
bool ret=spfa(,n+);
for(int i=;i<tot;i++) edge[i].d+=x;
return ret;
} int main()
{
int T,kase=;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
init();
double ud=;
while(m--)
{
int u,v;
double d;
scanf("%d%d%lf",&u,&v,&d);
addedge(u,v,d);
ud=max(ud,d);
}
for(int i=;i<=n;i++) addedge(,i,ud+);
printf("Case #%d: ",++kase);
if(!ok(ud+))
{
puts("No cycle found.");
continue;
}
double l=,r=ud;
while(r-l>1e-)
{
double mid=(l+r)/;
if(ok(mid)) r=mid;
else l=mid;
}
printf("%.2lf\n",l);
}
}

UVA 11090 : Going in Cycle!! 【spfa】的更多相关文章

  1. UVa 11090 Going in Cycle!!【Bellman_Ford】

    题意:给出n个点m条边的加权有向图,求平均值最小的回路 自己想的是用DFS找环(真是too young),在比较找到各个环的平均权值,可是代码实现不了,觉得又不太对 后来看书= =好巧妙的办法, 使用 ...

  2. UVA11090 Going in Cycle!! 【SPFA】

    题意:求一个无向图的边权平均值最小的环 思路:假设环中Σwi/t<ans 那变形一下就是Σwi<ans*t → Σ(wi-ans)< 0 这样就可以二分答案做了 #include & ...

  3. UVA - 11090 - Going in Cycle!!(二分+差分约束系统)

    Problem  UVA - 11090 - Going in Cycle!! Time Limit: 3000 mSec Problem Description You are given a we ...

  4. UVA 11090 - Going in Cycle!!(Bellman-Ford)

    UVA 11090 - Going in Cycle!! option=com_onlinejudge&Itemid=8&page=show_problem&category= ...

  5. 141. Linked List Cycle【easy】

    141. Linked List Cycle[easy] Given a linked list, determine if it has a cycle in it. Follow up:Can y ...

  6. 【SPFA】 最短路计数

    最短路计数 [问题描述]   给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. [输入格式]   输入第一行包含2个正整数N,M,为图的顶点数与边数. ...

  7. sendrose【SPFA】

    之前看到一题需要并查集+SPFA,然后就特别囧的发现自己SPFA这个历史遗留问题已经不知道怎么打了╮(╯▽╰)╭ 就果断挑了一题特别裸的SPFA赶紧搞搞掉,顺便自己乱YY下学SPFA的笔记,免得自己下 ...

  8. uva 10154 - Weights and Measures【dp】qi

    题意:uva 10154 - Weights and Measures 题意:有一些乌龟有一定的体重和力量,求摞起来的最大高度.力量必须承受其上面包含自己的所有的重量. 分析:先按其能举起来的力量从小 ...

  9. 【SPFA】POJ1511-Invitation Cards

    [题目大意] 给出一张有向图,以1位源点,求“从源点出发到各点的距离”和“与各点返回源点的距离和”相加得到的和. [思路] 毫无疑问是最短路径,但是这数据量就算是SPFA也绝壁会超时啊,抱着必死的心态 ...

随机推荐

  1. Kubernetes Controller执行框架解析

    毫无疑问,声明式API以及Controller机制是Kubernetes设计理念的基础.Controller不断从API Server同步资源对象的期望状态并且在资源对象的期望状态和实际运行状态之间进 ...

  2. 集中式日志分析平台 Elastic Stack(介绍)

    一.ELK 介绍 二.ELK的几种常见架构 >>ELK 介绍<< ELK 构建在开源基础之上,让您能够安全可靠地获取任何来源.任何格式的数据,并且能够实时地对数据进行搜索.分析 ...

  3. Arouter核心思路和源码

    前言 阅读本文之前,建议读者: 对Arouter的使用有一定的了解. 对Apt技术有所了解. Arouter是一款Alibaba出品的优秀的路由框架,本文不对其进行全面的分析,只对其最重要的功能进行源 ...

  4. Postman接口测试动态传参——动态获取token值

    上午刚学会jmeter动态传参,下午研究了下postman也知道怎么动态获取token了. 主要就是第1行和第2行代码,第3行加上是希望Test Results有个返回值,如果不加第3行运行成功后也看 ...

  5. Java中volatile关键字的最全总结

    转载至:https://blog.csdn.net/u012723673/article/details/80682208 关于volatile很重要的一点: 它保证了可见性,即其他线程对volati ...

  6. Shell编程、part5

    本节内容 1. 三剑客简介 2. sed命令详解 3. awk命令详解 文本处理三剑客 在 Shell 下使用这些正则表达式处理文本最多的命令有下面几个工具: |                 命令 ...

  7. 《React+Redux前端开发实战》笔记3:基于Webpack构建的Hello World案例(下)

    2.使用React编码 下面正式开始使用React来编写前端代码. (1)npm安装react和react-dom: npm install react react-dom -S (2)用下面代码替换 ...

  8. QT use of undeclared identifier 'cout'

    在QT 5.12中直接使用cout将提示错误如下: 添加库 #include<iostream>,并将cout&end改为std::cout&std::endl 代码如下: ...

  9. 两张超级大表join优化

    一个简单的两表关联,SQL跑了差不多一天一夜,这两个表都非常巨大,每个表都有几十个G,数据量每个表有20多亿,表的字段也特别多. 相信大家也知道SQL慢在哪里了,单个进程的PGA 是绝对放不下几十个G ...

  10. Java学习:通过Scanner读取文件

    Scanner不仅能够读取用户的键盘输入,还可以读取文件输入. 需要在创建Scanner对象的时候传入一个File对象作为参数.代码如下: import java.util.Scanner; impo ...