在加权有向图中求平均权值最小的回路。

一上手没有思路,看到“回路”,第一想法就是找连通分量,可又是加权图,没什么好思路,那就转换题意:由求回路权值->判负环,求最小值->常用二分答案。

二份答案,再利用利用bellman-ford判负环。

注意:

1、double:经常为了确定每个变量的类型,漏掉了某个变量,调半天心都凉了。干脆全变double。

2、没有告诉m的数据范围,要是在比赛中肯定有人问,要是reply是“read carefully”,总不能猜吧,乖乖用vector吧= =

3、原图为有向图,但不一定强连通,所以所有点要先入队才能找到全部的连通分量(就wa在这里)

 #include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#define clr(a,m) memset(a,m,sizeof(a))
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std; const int MAXN=;
const int INF =1e8;
const double eps=1e-; struct Edge{
int u,v;
double c;
}; int inq[MAXN],cnt[MAXN];
double d[MAXN];
vector<Edge>edge;
vector<int>G[MAXN]; void init(int n)
{
edge.clear();
rep(i,,n)
G[i].clear();
} void add(int u,int v,double c)
{
edge.push_back((Edge){u,v,c});
int m=edge.size();
G[u].push_back(m-);
} double build(int m)
{
int u,v;
double c;
double up=;
rep(i,,m){
scanf("%d%d%lf",&u,&v,&c);
up=max(up,c);
add(u,v,c);
}
return up;
} bool BF(int st,int n)
{
clr(inq,);
clr(cnt,);
queue<int>q;
rep(i,,n){
if(i==st)d[i]=;
else d[i]=INF;
q.push(i);
}
while(!q.empty())
{
int u=q.front();q.pop();
inq[u]=false;
int sz=G[u].size();
rep(i,,sz-){
Edge e=edge[G[u][i]];
if(d[e.v]>d[u]+e.c){
d[e.v]=d[u]+e.c;
if(!inq[e.v]){
q.push(e.v);
inq[e.v]=true;
if(++cnt[e.v]>n)
return true;
}
}
}
}
return false;
} bool test(int n,int m,double x)
{
rep(i,,m-)
edge[i].c-=x;
bool flog=BF(,n);
rep(i,,m-)
edge[i].c+=x;
return flog;
} int main()
{
int T,n,m;
scanf("%d",&T);
for(int ans=;ans<=T;ans++)
{
scanf("%d%d",&n,&m);
init(n);
double up=build(m); printf("Case #%d: ",ans);
if(!test(n,m,up+))
printf("No cycle found.\n");
else{
double l=,r=up;
while(r-l>eps)
{
double x=l+(r-l)/;
if(test(n,m,x))
r=x;
else
l=x;
}
printf("%.2f\n",l);
}
}
return ;
}

UVA 11090 Going in Cycle!!(二分答案+判负环)的更多相关文章

  1. poj 2049(二分+spfa判负环)

    poj 2049(二分+spfa判负环) 给你一堆字符串,若字符串x的后两个字符和y的前两个字符相连,那么x可向y连边.问字符串环的平均最小值是多少.1 ≤ n ≤ 100000,有多组数据. 首先根 ...

  2. poj 3621 二分+spfa判负环

    http://poj.org/problem?id=3621 求一个环的{点权和}除以{边权和},使得那个环在所有环中{点权和}除以{边权和}最大. 0/1整数划分问题 令在一个环里,点权为v[i], ...

  3. [USACO07DEC]观光奶牛Sightseeing Cows 二分答案+判断负环

    题目描述 Farmer John has decided to reward his cows for their hard work by taking them on a tour of the ...

  4. LOJ #10084. 「一本通 3.3 练习 1」最小圈(二分+SPFA判负环)

    题意描述: 见原LOJ:https://loj.ac/problem/10084 题解: 假设所求的平均最小值为X,环上各个边的权值分别为A1,A2...Ak,可以得到: X=(A1+A2+A3+.. ...

  5. 【题解】 [HNOI2009] 最小圈 (01分数规划,二分答案,负环)

    题目背景 如果你能提供题面或者题意简述,请直接在讨论区发帖,感谢你的贡献. 题目描述 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过k个节点,那么一个圈的平均值为圈上k条边权的和除 ...

  6. 训练指南 UVA - 11090(最短路BellmanFord+ 二分判负环)

    layout: post title: 训练指南 UVA - 11090(最短路BellmanFord+ 二分判负环) author: "luowentaoaa" catalog: ...

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

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

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

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

  9. UVA11090 Going in Cycle!!(二分判负环)

    UVA11090 Going in Cycle!! 二分答案,用spfa判负环. 注意格式:图不一定连通. 复杂度$O(nmlog(maxw-minw))$ #include<iostream& ...

随机推荐

  1. XCode签名证书死活不能选

    Editors>Show Values on Xcode , then you can select the code sign instead of typing

  2. ios开发之多线程

    多线程的主要是用来执行一些耗时操作,例如网络图片.视频.歌曲.书籍等资源下载,游戏中的音乐播放等,充分发挥多核处理器的优势,并发(同时执行)任务让系统运行的更快.更流畅. 介绍下比较常用的多线程技术, ...

  3. Kibana

    https://github.com/moonstack/moon-kibana.git

  4. LINUX下如何查看tomcat运行状态,判断其是否启动

    1,查看Tomcat启动日志. ${catalina_home}\logs [root@iZ25b4ffkfaZ logs]# tail -f catalina.outSep 10, 2015 11: ...

  5. POJ 3280 Cheapest Palindrome(DP)

    题目链接 题意 :给你一个字符串,让你删除或添加某些字母让这个字符串变成回文串,删除或添加某个字母要付出相应的代价,问你变成回文所需要的最小的代价是多少. 思路 :DP[i][j]代表的是 i 到 j ...

  6. POJ1426Find The Multiple

    http://poj.org/problem?id=1426 题意 : 输入一个数n,找n的倍数m,这个m所满足的条件是,每一位数只能由0或1组成,在题目的旁边用红色的注明了Special Judge ...

  7. C#实现身份证号码验证的方法

    本文实例讲述了C#实现身份证号码验证的方法.分享给大家供大家参考.具体实现方法如下: 随着现在互联网的发展,越来越多的注册用户的地方都用到了身份证,那么对于输入的身份证如何验证呢?看下面的代码,其实很 ...

  8. Linux awk小记

    预备知识: -F:表示某行使用的分隔符,默认是空格: NR:表示当前是第几行: NF:表示文件中的某行根据分隔符共有几列: 1.打印某一列 awk '{print $1}' text.txt 其中$0 ...

  9. 乳草的入侵//BFS

    P1030 乳草的入侵 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 USACO OCT09 6TH 描述 Farmer John一直努力让他的草地充满鲜美 ...

  10. iOS开发--使用NSMutableAttributedString 实现富文本

    在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求.之前在网上找了一些资料,有的是重绘UILabel的textLayer,有的是用html5实现的,都比较麻烦 ...