UVA11090 Going in Cycle!! 【SPFA】
题意:求一个无向图的边权平均值最小的环
思路:假设环中Σwi/t<ans 那变形一下就是Σwi<ans*t → Σ(wi-ans)< 0 这样就可以二分答案做了
#include <stdio.h>
#include <iostream>
#include<queue>
#include <string.h>
#include <algorithm>
#define maxn 90000
#define esp 0.00000001
using namespace std;
int head[maxn],point[maxn],next[maxn],value[maxn];
int now,n,m,x,y,v,inque[maxn];
double dist[maxn];
void add(int x,int y,int v)
{
next[++now]=head[x];
head[x]=now;
point[now]=y;
value[now]=v;
}
int spfa(int s,double x)
{
for(int i=1;i<=n;i++)dist[i]=0x3f3f3f3f;
memset(inque,0,sizeof(inque));
int visit[maxn]={0};
queue<int>q;
q.push(s);
visit[s]=1;
dist[s]=0;
while(!q.empty())
{
int u=q.front();
q.pop();
visit[u]=0;
for(int i=head[u];i;i=next[i])
{
int k=point[i];
if(double(dist[u]+1.0*value[i]-x)<dist[k])
{
dist[k]=(double)dist[u]+1.0*value[i]-x;
if(visit[k]==0)
{
visit[k]=1;
inque[k]++;
if(inque[k]>n)return 1;
q.push(k);
}
}
}
}
return 0;
}
int main()
{
int t,cas=1,flag=0;
scanf("%d",&t);
while(t--)
{
now=0;
memset(head,0,sizeof(head));
scanf("%d%d",&n,&m);
double l=0,r=0;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&v);
add(x,y,v);
if(v>r)r=v;
}
printf("Case #%d: ",cas++);
for(int i=1;i<=n;i++)
{
add(n+1,i,0);
}
if(spfa(n+1,r+100)==0){printf("No cycle found.\n");continue;}
while(r-l>esp)
{
double mid=(l+r)/2;
if(spfa(n+1,mid)==1){r=mid;flag=1;}else l=mid;
}
// cout<<spfa(n+1,2.5)<<endl;
printf("%.2f\n",r);
}
return 0;
}
UVA11090 Going in Cycle!! 【SPFA】的更多相关文章
- UVA 11090 : Going in Cycle!! 【spfa】
题目链接 题意及题解参见lrj训练指南 #include<bits/stdc++.h> using namespace std; const double INF=1e18; ; ; in ...
- 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的笔记,免得自己下 ...
- 【SPFA】POJ1511-Invitation Cards
[题目大意] 给出一张有向图,以1位源点,求“从源点出发到各点的距离”和“与各点返回源点的距离和”相加得到的和. [思路] 毫无疑问是最短路径,但是这数据量就算是SPFA也绝壁会超时啊,抱着必死的心态 ...
- 【SPFA】POJ1860-Currency Exchange
[题目大意] 给出每两种货币之间交换的手续费和汇率,求出从当前货币s开始交换,能否赚. [思路] 反向运用SPFA,判断是否有正环.每次队首元素出队之后,判断一下到源点s的距离是否增大,增大则返回tr ...
- 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】
还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...
- 【spfa】bzoj3921 Mimori与树海
考虑“删除后图仍连通”,即其不是无向图的桥(bridge),可以用Tarjan算法预处理,这里不赘述. [算法一] 枚举删除的是哪条边,然后枚举起点,暴搜,统计答案. 可以通过0.1号测试点. 预计得 ...
- BZOJ2662[BeiJing wc2012]冻结【SPFA】
“我要成为魔法少女!” “那么,以灵魂为代价,你希望得到什么?” “我要将有关魔法和奇迹的一切,封印于卡片之中„„” 在这个愿望被实现以后的世界里,人们享受着魔法卡片(SpellCard ...
随机推荐
- Linux常用命令——tac、bc
1.从文件尾到文件头一页一页的显示内容 tac xxx.log |more //tac命令与cat命令相反,从文件尾开始读文件 2.shell下科学计算工具bc echo "scale=5; ...
- c/s架构搭建
1.socket(套接字) Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接 ...
- OCP 11g 第二章练习
练习 2-1 在Windows计算机上安装SQL Developer 在本练习中,将在Windows计算机上安装SQL Developer 1. 从以下URL下载当前SQL Developer版本: ...
- 手写MVVM框架 之vue双向数据绑定原理剖析
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Hyperledger(超级账本)的worldstate和SAP CRM的CRMD_CUMULAT_H
Hyperledger fabric是基于区块链技术的一个开源项目,由Linux基金会于2015年发起,目的是推进区块链数字技术和交易验证的发展和落地. Hyperledger由多个区块构成了一个有序 ...
- postman做压力测试
压力测试 当你需要验证你的接口的抗压能力的时候,可以点击Runner,进行压力测试 注意:压力测试只能以文件夹的方式执行多个接口,不能单独执行,如果想要测试某一个接口,就创一个文件夹,这个文件夹里只有 ...
- Linux 编译升级 FFmpeg 步骤
如果服务器已经安装了一个 Ffmpeg 的话,比如已安装在 /usr/local/ffmpeg 目录.Linux下版本升级步骤如下: 1.下载 ffmpeg-*.tar.gz到 Ffmpeg 官网 h ...
- git 设置ss代理
git config --global https.proxy http://127.0.0.1:1080 git config --global https.proxy https:// ...
- JS数组专题1️⃣ ➖ 数组扁平化
一.什么是数组扁平化 扁平化,顾名思义就是减少复杂性装饰,使其事物本身更简洁.简单,突出主题. 数组扁平化,对着上面意思套也知道了,就是将一个复杂的嵌套多层的数组,一层一层的转化为层级较少或者只有一层 ...
- codevs 2853 方格游戏--棋盘dp
方格游戏:http://codevs.cn/problem/2853/ 这和传纸条和noip方格取数这两个题有一定的相似性,当第一眼看到的时候我们就会想到设计$dp[i][j][k][l]$(i,j表 ...