- 题目大意

给你一个有向图,问你定义一个环的平均值为这个环上所有边的平均值,问你最小的环的平均值是多少。

- 解题思路

先利用spfa来判断负环,然后用二分去判断若当前的二分值是mid,让所有的边都减去这个值,如果此时图中出现负环,则说明有环的平均值比这个更小。

- 代码

#include<cstdio>
#include<algorithm>
#include<queue>
#include<vector>
#include<cstring>
using namespace std;
const int N=500;
const int M=1e6+5;
const int INF=0x3f3f3f;
int n,m;
struct edge {int v,next;double w;
}e[M*2];
int head[N], cnt;
double d[N];
int inq[N];
int cn[N];
void init ()
{cnt=0;memset(head,-1,sizeof(head));
}
void addedge(int u,int v,double c)
{e[cnt].w=c;e[cnt].v=v;e[cnt].next=head[u];head[u]=cnt++;
}
bool SPFA(int s) {memset(d, INF, sizeof(d));memset(inq, 0, sizeof(inq));memset(cn, 0, sizeof(cn));queue<int> Q;Q.push(s);d[s] = 0;inq[s] = 1;while(Q.size()) {int u = Q.front();Q.pop();inq[u] = 0;for(int i = head[u]; ~i; i = e[i].next){int v = e[i].v;double w = e[i].w;if(d[v] > d[u] + w){d[v] = d[u] + w;if(!inq[v]){Q.push(v);inq[v] = 1;if(++cn[v] >= n)return false;}}}}return true;
}bool check(double x)
{bool vis=false;for(int i=1;i<=n;i++){for(int j=head[i];j!=-1;j=e[j].next)e[j].w-=x;}for(int i=1;i<=n;i++){if(!SPFA(i))vis=true;}for(int i=1;i<=n;i++){for(int j=head[i];j!=-1;j=e[j].next)e[j].w+=x;}return vis;
}int main()
{int t,a,b;double c;scanf("%d",&t);for(int k=1;k<=t;k++){double l=INF,r=0,mid;init();scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){scanf("%d%d%lf",&a,&b,&c);addedge(a,b,c);l=min(l,c);r=max(r,c);}printf("Case #%d: ",k);if(!check(r+1))printf("No cycle found.\n");else{while(r-l>1e-8){mid=(r+l)/2;if(check(mid))r=mid;elsel=mid;}printf("%.2lf\n",r);}}return 0;
}

  

转载于:https://www.cnblogs.com/alpacadh/p/8449749.html

H - Going in Cycle!! (UVA - 11090)相关推荐

  1. UVA 11090 Going in Cycle!! 二分答案 + bellman-ford

    求平均值最小的环,如果平均值最小为x,则如果把每条边的权值都减(x+1),那么新图将会有负环,用bellman ford判断. //#pragma comment(linker, "/STA ...

  2. linux创建和编辑文件,linux基础-第九单元 利用vi编辑器创建和编辑正文文件

    vi编辑器简介 什么是vi vi编辑器的操作模式 vi编辑器的3种基本模式 在vi编辑器中光标的移动 移动光标位置的键与光标移动间的关系 进入插入模式 从命令行模式进入插入模式的命令 在命令行模式下删 ...

  3. gbrl参数_grbl-0.9运行参数配置说明

    grbl-0.9运行参数配置说明 2018-09-14 平台:ArduinoUNO R3 软件:Grbl 默认IO口配置 Grbl基本操作指令 参考[https://github.com/grbl/g ...

  4. π-Algorithmist分类题目(2)

    原题网站:Algorithmist,http://www.algorithmist.com/index.php/Main_Page π-Algorithmist分类题目(2) Set Theory U ...

  5. 用OpenGL导演一场烟花盛会,迎接即将到来的新年

    忙碌了一年,今天终于放假了.原本打算好好休息一下,没成想只过了半天就觉得有点无聊.看家人和朋友们都在忙年,那我就用OpenGL导演一场烟花盛会,献给即将到来的新年吧. 一说到OpenGL,很多人都会觉 ...

  6. GRBL二:串口控制命令及代码解析(转载)

    因初学GRBL,网上搜集了一些GRBL的资料,怕遗忘,所以转载过来,如有侵权请联系,立即删除. 原文地址:https://blog.csdn.net/zhangjikuan/article/detai ...

  7. 零知识证明:重要构造

    文章目录 ZKP for NP Blum's ZK PoK for HC Completeness Soundness Zero Knowledge WI of n-parallelized vers ...

  8. 【雕刻机】Grbl程序使用入门

    平台:ArduinoUNO R3 软件:Grbl 默认IO口配置 Grbl基本操作指令 参考[https://github.com/grbl/grbl/wiki/Configuring-Grbl-v0 ...

  9. gbrl参数_GRBL介绍

    近日项目需要,PLC中添加直线差补类的功能,第一次接触GRBL,做个大致概括. Grbl是一款针对Arduino/AVR328芯片的嵌入式G代码编译和运动控制器. 所以说GRBL分为两部分:上位机部分 ...

  10. Grbl程序使用入门

    Grbl程序使用入门 槐之林 | 2017-07-07 22:51:14    阅读:7760   发布文章 平台:Arduino UNO R3 软件:Grbl 默认IO口配置 Grbl基本操作指令 ...

最新文章

  1. python可视化窗口制作一个摇骰子游戏_使用python制作一个抽奖小游戏——骰子游戏...
  2. 不要再问我Python2和Python3的Unicode 问题啦!
  3. 定位到某个单词_【侃侃单词】词根词缀记单词-loc
  4. 带圈汉字 在线生成_手写签名在线生成器-手写签名在线生成器可复制
  5. mysql 自定义函数function,函数和存储过程的区别
  6. se linux ll-z,Linux selinux 基础
  7. 中国人工智能学会通讯——融合经济学原理的个性化推荐
  8. HDU-1994-利息计算
  9. tableau三轴该怎么做_举个栗子!Tableau技巧(30):巧妙实现 双柱图 和 折线图 的组合图表...
  10. 超弦计算机,物理学四大神兽——拉普拉斯妖
  11. HTML+CSS制作的纯静态网页
  12. Matlab中产生门函数----Heaviside函数的调用方法
  13. 怎么压缩视频到最小,什么操作简单
  14. 【CYH-02】NOIp考砸后虐题赛:转换式:题解
  15. 分布式事务 - 三种常见的解决方案
  16. 2020.08.05狂人日记:C#计时器与串口通信
  17. 作为一名程序员,你知道1024程序员是怎么来的么?
  18. SparkSQL join
  19. 应用发布出现问题—— “管理系统“ (Apple ID: 123456789) 在iTunes Connect上存在问题。
  20. [保姆级图文教程]如何配置局域网多机共享同步文件夹

热门文章

  1. 【渝粤教育】国家开放大学2018年秋季 0579-22T电路及磁路(2)(一) 参考试题
  2. caffe MNISTAutoencoder
  3. FPGA智能传感系统(二)基于FPGA的交通灯设计
  4. 多臂老虎机导论(一)引言
  5. Java多线程系列--“JUC线程池”01之 线程池架构
  6. CGLIB 和 JDK生成动态代理类的区别(转)
  7. 【解题报告】SRM-08
  8. 【源码】HashMap源码及线程非安全分析
  9. 抽取、转换和装载介绍(五)抽取数据
  10. 病毒或木马修改注册表,导执可执行文件无法执行的处理办法