bzoj1486: [HNOI2009]最小圈
二分+dfs。
这道题求图的最小环的每条边的权值的平均值μ。
这个平均值是大有用处的,求它我们就不用记录这条环到底有几条边构成。
如果我们把这个图的所有边的权值减去μ,就会出现负环。
所以二分求解。
#include<cstdio>
#include<algorithm>
#include<cstring>
#define eps 1e-10
using namespace std;
const int maxn = + ;
const int maxm = + ;
int g[maxn],v[maxm],next[maxm],eid;
double w[maxm],dist[maxn],e[maxm],c;
bool vis[maxn];
int n,m; void addedge(int a,int b,double c) {
v[eid]=b; w[eid]=c; next[eid]=g[a]; g[a]=eid++;
} void build() {
memset(g,-,sizeof(g));
scanf("%d%d",&n,&m);
for(int i=,a,b;i<=m;i++) {
scanf("%d%d%lf",&a,&b,&c);
addedge(a,b,c);
}
} bool dfs(int u) {
vis[u]=;
for(int i=g[u];~i;i=next[i]) if(dist[v[i]]>dist[u]+e[i]) {
if(vis[v[i]]) return true;
dist[v[i]]=dist[u]+e[i];
if(dfs(v[i])) return true;
}
vis[u]=;
return false;
} bool calc() {
memset(dist,,sizeof(dist));
memset(vis,,sizeof(vis));
for(int i=;i<=n;i++) if(dfs(i)) return ;
return ;
} void solve() {
double l = -1e9,r=1e9,mid;
while(r-l>=eps) {
mid=(l+r)/;
for(int u=;u<=n;u++)
for(int i=g[u];~i;i=next[i])
e[i]=w[i]+mid;
if(calc()) l=mid;
else r=mid;
}
printf("%.8lf\n",-l);
} int main() {
build();
solve();
return ;
}
bzoj1486: [HNOI2009]最小圈的更多相关文章
- BZOJ1486 HNOI2009 最小圈 【01分数规划】
BZOJ1486 HNOI2009 最小圈 Description 应该算是01分数规划的裸板题了吧..但是第一次写还是遇到了一些困难,vis数组不清零之类的 假设一个答案成立,那么一定可以找到一个环 ...
- bzoj千题计划227:bzoj1486: [HNOI2009]最小圈
http://www.lydsy.com/JudgeOnline/problem.php?id=1486 二分答案 dfs版spfa判负环 #include<queue> #include ...
- 2018.09.24 bzoj1486: [HNOI2009]最小圈(01分数规划+spfa判负环)
传送门 答案只保留了6位小数WA了两次233. 这就是一个简单的01分数规划. 直接二分答案,根据图中有没有负环存在进行调整. 注意二分边界. 另外dfs版spfa判负环真心快很多. 代码: #inc ...
- 分数规划(Bzoj1486: [HNOI2009]最小圈)
题面 传送门 分数规划 分数规划有什么用? 可以把带分数的最优性求解式化成不带除发的运算 假设求max{\(\frac{a}{b},b>0\)} 二分一个权值\(k\) 令\(\frac{a}{ ...
- BZOJ1486:[HNOI2009]最小圈(最短路,二分)
Description Input Output Sample Input 4 5 1 2 5 2 3 5 3 1 5 2 4 3 4 1 3 Sample Output 3.66666667 Sol ...
- [bzoj1486][HNOI2009]最小圈——分数规划+spfa+负环
题目 传送门 题解 这个题是一个经典的分数规划问题. 把题目形式化地表示,就是 \[Minimize\ \lambda = \frac{\sum W_{i, i+1}}{k}\] 整理一下,就是 \[ ...
- 【BZOJ1486】[HNOI2009]最小圈 分数规划
[BZOJ1486][HNOI2009]最小圈 Description Input Output Sample Input 4 5 1 2 5 2 3 5 3 1 5 2 4 3 4 1 3 Samp ...
- bzoj 1486: [HNOI2009]最小圈 dfs求负环
1486: [HNOI2009]最小圈 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1022 Solved: 487[Submit][Status] ...
- BZOJ 1486: [HNOI2009]最小圈( 二分答案 + dfs判负圈 )
二分答案m, 然后全部边权减掉m, 假如存在负圈, 那么说明有平均值更小的圈存在. 负圈用dfs判断. ------------------------------------------------ ...
随机推荐
- Unity3D 利用NGUI2.6.3做技能冷却的CD效果
转自http://blog.csdn.net/qqmcy/article/details/9469021 NGUI非常强大我们今天来学习一下,如何利用NGUI做技能冷却的CD效果.先导入NGUI的插件 ...
- 微信wap开发,页面显示元素不全-微信开发(asp.net)
最近在开发的微信的微商城,出现这样一种情况: pc上浏览正常,但是一到手机上浏览就会缺少部分元素 解决办法: 找了很多原因,还通过uc浏览器把网页到存下来了,发现并没有缺少元素,只是没有显示出来,后来 ...
- 领接表的建立和它的DFS, BFS;;;
//图的建立的实现->邻结矩阵和邻结表两种表示方法 #include <cstdio> #include <cstdlib> //#define _OJ_ int vis ...
- 我的第一个python爬虫程序
程序用来爬取糗事百科上的图片的,程序设有超时功能,具有异常处理能力 下面直接上源码: #-*-coding:utf-8-*- ''' Created on 2016年10月20日 @author: a ...
- 【转载】hadoop的版本问题
免责声明: 本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除. 原文作者:阿笨猫 原文地址:http://www.cnblogs.com/xu ...
- 【POJ】【2151】Check the difficulty of problems
概率DP kuangbin总结中的第8题 一开始题目看错导致想转移方程想错了……想成f[i][j]表示前 i 个队伍中最多的做出来 j 道题的概率……sigh 看了下题解……其实是对于每个队伍 i 单 ...
- OD鲜为人知的小技巧--搜索通配符(关键字)
我看过一些OD教程,关于通配符这一点很少有人讲解(大概是我看的教程少吧) 近日通过看<黑客反汇编揭秘(第二版)>第165页了解到,原来OD还有这样方便的功能,那就是搜索通配符: Olly ...
- Roy Li的学习和成长自传
我不知道自己是什么时候从哪里来到这个世界上的,也许是石头里蹦出来的,也许是女娲捏出来的,上帝造出来的.上溯到我记忆的最前端,抱着我的好象 是一个女人,穿着白衣服,白得象石灰一样的那种.以至于后来我被告 ...
- cookie中转注入实战
随着网络安全技术的发展,SQL注入作为一种很流行的攻击方式被越来越多的人所知晓.很多网站也都对SQL注入做了防护,许多网站管理员的做法就是添加一个防注入程序.这时我们用常规的手段去探测网站的SQL注入 ...
- 解决ORA-00020错误
解决ORA-00020错误 分类: Oracle2009-05-13 17:26 3398人阅读 评论(0) 收藏 举报 数据库sessionoraclesql服务器object 项目上使用的Orac ...