UVA 11090 : Going in Cycle!! 【spfa】
题意及题解参见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】的更多相关文章
- UVa 11090 Going in Cycle!!【Bellman_Ford】
题意:给出n个点m条边的加权有向图,求平均值最小的回路 自己想的是用DFS找环(真是too young),在比较找到各个环的平均权值,可是代码实现不了,觉得又不太对 后来看书= =好巧妙的办法, 使用 ...
- UVA11090 Going in Cycle!! 【SPFA】
题意:求一个无向图的边权平均值最小的环 思路:假设环中Σwi/t<ans 那变形一下就是Σwi<ans*t → Σ(wi-ans)< 0 这样就可以二分答案做了 #include & ...
- UVA - 11090 - Going in Cycle!!(二分+差分约束系统)
Problem UVA - 11090 - Going in Cycle!! Time Limit: 3000 mSec Problem Description You are given a we ...
- UVA 11090 - Going in Cycle!!(Bellman-Ford)
UVA 11090 - Going in Cycle!! option=com_onlinejudge&Itemid=8&page=show_problem&category= ...
- 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 ...
- 【SPFA】 最短路计数
最短路计数 [问题描述] 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. [输入格式] 输入第一行包含2个正整数N,M,为图的顶点数与边数. ...
- sendrose【SPFA】
之前看到一题需要并查集+SPFA,然后就特别囧的发现自己SPFA这个历史遗留问题已经不知道怎么打了╮(╯▽╰)╭ 就果断挑了一题特别裸的SPFA赶紧搞搞掉,顺便自己乱YY下学SPFA的笔记,免得自己下 ...
- uva 10154 - Weights and Measures【dp】qi
题意:uva 10154 - Weights and Measures 题意:有一些乌龟有一定的体重和力量,求摞起来的最大高度.力量必须承受其上面包含自己的所有的重量. 分析:先按其能举起来的力量从小 ...
- 【SPFA】POJ1511-Invitation Cards
[题目大意] 给出一张有向图,以1位源点,求“从源点出发到各点的距离”和“与各点返回源点的距离和”相加得到的和. [思路] 毫无疑问是最短路径,但是这数据量就算是SPFA也绝壁会超时啊,抱着必死的心态 ...
随机推荐
- Toad oracle
CJ2PFCQ6P49Q4WHQT2D03GNTVX2AN5DG6FWD04YL4QW625KT391J9YF38VKB92SNBWNW-RU-BOARD-BD cr2384
- 定位网页元素、透明度、z-index、包裹性和破坏性
一.定位 position属性————规定元素的定位类型,即元素脱离文档流的布局,在页面的任意位置显示 也可以参见以前的总结 <—— 戳 static:默认值,没有定位 relative:相对定 ...
- Microsoft Remote Desktop for Mac
因为teamviewer 又限制经常断线,所以改用 Microsoft Remote Desktop 代替,用来从mac连接远程windows 主要记录一下下载地址,因为在mac app store ...
- js 数组去重方法总结
var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, ...
- 【转帖】大话Spring Cloud
springcloud(一):大话Spring Cloud 2017/05/01 http://www.ityouknow.com/springcloud/2017/05/01/simple-sp ...
- CSS3与页面布局学习总结——多种页面布局
一.负边距与浮动布局 1.1.负边距 所谓负边距就是margin取负值的情况,如margin:-40px:margin-left:-100%.当一个元素与另一个元素margin取负值时将拉近距离.常见 ...
- redis内存满了怎么办?
redis最为缓存数据库,一般用于存储缓存数据,用于缓解数据库压力,但是缓存太多,内存满了怎么办呢.一般有以下几种方法 一.增加内存 redis存储于内存中,数据太多,占用太多内存,那么增加内存就是最 ...
- C++笔记(0)——判定一个数字是否是素数
博主之前使用的编程语言是Python,但是这门语言的效率比较低(通常,不优化的情况下,但是即便如此我还是偏爱Python),而且博主打算参加PAT考试(真正的原因),及博主打算顺便深入学习下机器学习框 ...
- ubuntu 安装 CUDA、 cuDNN 的tips
CUDA 查看驱动兼容性:https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html 查看GCC 与CUDA 驱动版本的兼容性 ...
- python之代码规范
第一章 为什么要有规范化目录 真正的后端开发的项目,系统等,少则几万行代码,多则十几万,几十万行代码 软件开发,规范你的项目目录结构,代码规范,遵循PEP8规范等等,让你更加清晰,合理开发. 1.代码 ...