UVA 11090 Going in Cycle!!(二分答案+判负环)
在加权有向图中求平均权值最小的回路。
一上手没有思路,看到“回路”,第一想法就是找连通分量,可又是加权图,没什么好思路,那就转换题意:由求回路权值->判负环,求最小值->常用二分答案。
二份答案,再利用利用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!!(二分答案+判负环)的更多相关文章
- poj 2049(二分+spfa判负环)
poj 2049(二分+spfa判负环) 给你一堆字符串,若字符串x的后两个字符和y的前两个字符相连,那么x可向y连边.问字符串环的平均最小值是多少.1 ≤ n ≤ 100000,有多组数据. 首先根 ...
- poj 3621 二分+spfa判负环
http://poj.org/problem?id=3621 求一个环的{点权和}除以{边权和},使得那个环在所有环中{点权和}除以{边权和}最大. 0/1整数划分问题 令在一个环里,点权为v[i], ...
- [USACO07DEC]观光奶牛Sightseeing Cows 二分答案+判断负环
题目描述 Farmer John has decided to reward his cows for their hard work by taking them on a tour of the ...
- LOJ #10084. 「一本通 3.3 练习 1」最小圈(二分+SPFA判负环)
题意描述: 见原LOJ:https://loj.ac/problem/10084 题解: 假设所求的平均最小值为X,环上各个边的权值分别为A1,A2...Ak,可以得到: X=(A1+A2+A3+.. ...
- 【题解】 [HNOI2009] 最小圈 (01分数规划,二分答案,负环)
题目背景 如果你能提供题面或者题意简述,请直接在讨论区发帖,感谢你的贡献. 题目描述 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过k个节点,那么一个圈的平均值为圈上k条边权的和除 ...
- 训练指南 UVA - 11090(最短路BellmanFord+ 二分判负环)
layout: post title: 训练指南 UVA - 11090(最短路BellmanFord+ 二分判负环) author: "luowentaoaa" catalog: ...
- 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= ...
- UVA11090 Going in Cycle!!(二分判负环)
UVA11090 Going in Cycle!! 二分答案,用spfa判负环. 注意格式:图不一定连通. 复杂度$O(nmlog(maxw-minw))$ #include<iostream& ...
随机推荐
- 2208: [Jsoi2010]连通数 - BZOJ
Description Input 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每行N个字符.第i行第j列的1表示顶点i到j有边,0则表示无边. Output 输出一行一个整数,表示该图 ...
- CSS3技巧:利用css3径向渐变做一张优惠券(转)
在很多购物网站上都能看到优惠券,代金券,什么什么的券,但基本都是图片直接放上去,那么你有没有想过css来做一个呢,反正我是这样想过.那么你怎么做呢,切图做背景平铺边缘,嗯,有这样想过,如今css3技术 ...
- 【转载】struct和typedef struct彻底明白了
分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可 ...
- [C/CPP系列知识] 在C中使用没有声明的函数时将发生什么 What happens when a function is called before its declaration in C
http://www.geeksforgeeks.org/g-fact-95/ 1 在C语言中,如果函数在声明之前被调用,那么编译器假设函数的返回值的类型为INT型, 所以下面的code将无法通过编译 ...
- Unity3D 相关项目代码
一.Application.PresistentDataPath 注意最后面是没有/的 public static string PresistentDataPathForEditor = " ...
- ECMALL目录结构设置与数据库表
[Ecmall]ECMALL目录结构设置与数据库表 最近在做ecmall的开发,ecmall在开源方面还有待进步啊,官方没有提供开发文档,也没有关于系统架构组织的贡献,使用者都要自己从0开始,官方 ...
- .net RESX资源文件
RESX资源文件最大的优势就是: 支持多语言 快速创建资源 管理方便 RESX可以支持多语言,Visual Studio编译后会出现附属程序集(satellite assembly),事实上是连接器( ...
- netbean使用技巧
1.让代码智能提示 有些情况下Ctrl+Space这个键被一些输入法占了,我们需要修改一下点击 工具->常规->快捷键映射->找到显示代码完成弹出式菜单->编辑为你喜欢的键就好 ...
- 如何使用 Apache ab 以及 OneAPM 进行压力测试?
下一个 release 准备小长假后就要 go-live ,所有的测试 case 都 cover 过了,但还未进行过压力测试,有点不放心,刚好过节期间家人都回家去了,假期终于可以抽点时间压测一把. A ...
- HDU 3397 Sequence operation (区间合并,操作比较多)
费了我一天半的时间,到处debug,后来才发现,主要是建树的时候只在叶子节点对lazy1和lazy2进行初始化了,父节点都没初始化...晕. 具体见代码吧. #include <iostream ...