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也绝壁会超时啊,抱着必死的心态 ...
随机推荐
- JS BOM(浏览器对象)
BOM即浏览器对象模型,它包括如下一些对象! (一)screen对象,Screen 对象中存放着有关显示浏览器屏幕的信息. 常见的属性有: availHeight:返回显示屏幕的高度 availWid ...
- python学习之socket&黏包
7.4 socket [重要] 避免学习各层的接口,以及协议的使用, socket已经封装好了所有的接口,直接使用这些接口或者方法即可,方便快捷,提升开发效率. socket在python中就是一 ...
- Logistic回归基础篇之梯度上升算法
代码示例: import numpy as np import matplotlib.pyplot as plt def loadDataSet(): dataMat = [];labelMat = ...
- DIY兼容机装苹果系统
遇到问题: 无法用变色龙引导:删除原WIN系统前隐藏分区 变色龙引导画面无法进安装界面:a,wowpc.iso版本低,换新版;b,复制EXTRA进MAC安装盘 MAC OS安装完成后重新启动卡在苹果图 ...
- Mac上安装配置Go语言,其实很简单(一)
下载Go语言可以去:Go语言中文网 安装及自己选择是否修改GOPATH 下载下来后双击安装就好,使用 go version 查看安装版本: 在Mac上安装完成后,会自动设置一些环境变量,使用 go e ...
- 用Kindle阅读PDF最简单的3个方法!
老实说,Kindle 对于PDF文件是很不友好的,经常会出现各种排版问题,所以,对电子阅读器方面比较了解的同学都知道,如果需要经常用阅读器查看PDF文件的话,最好还是买一款更大屏幕的设备,而Kindl ...
- [wpf] collectionViewsource 排序 和分组
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase" xmlns:swd="clr-n ...
- kafka复习(1)
一:flume复习 0.JMS(java message service )java消息服务 ----------------------------------------------------- ...
- 启动angular项目,端口被占用
启动项目,npm start,报如下错误: 解决:1.win+R,输入CMD,启动命令行窗口. 2.输入netstat -ano或者netstat -ano|findstr 8080,查看8080端口 ...
- React Native 底部导航栏
首先安装:npm install react-native-tab-navigator 然后再引入文件中 import TabNavigator from 'react-native-tab ...