bzoj 1486: [HNOI2009]最小圈 dfs求负环
1486: [HNOI2009]最小圈
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 1022 Solved: 487
[Submit][Status]
Description


最开始写floyd求负环结果TLE了,改成dfs后速度变成原来的100+倍。反正还是比较神奇。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 4000
#define MAXE 50000
#define MAXV 10000
#define PROB "loop"
#define eps 1e-4
#define INF 0x3f3f3f3f3f3f3f3fLL
#define inf 1E1000
#ifdef unix
#define LL "%lld"
#else
#define LL "%I64d"
#endif
typedef long long qword;
typedef long double real;
struct edge
{
int x,y;
real z;
}el[MAXE];
struct Edge
{
int np;
real val;
Edge *next;
}E[MAXE],*V[MAXV];
int tope=-;
void addedge(int x,int y,real z)
{
E[++tope].np=y;
E[tope].val=z;
E[tope].next=V[x];
V[x]=&E[tope];
}
bool state[MAXN];
real dst[MAXN];
bool dfs(int now)
{
Edge *ne;
state[now]=true;
for (ne=V[now];ne;ne=ne->next)
{
if (dst[ne->np]>dst[now]+ne->val)
{
if (state[ne->np])return true;
dst[ne->np]=dst[now]+ne->val;
if (dfs(ne->np))return true;
}
}
state[now]=false;
return false;
}
int main()
{
// freopen(PROB".in","r",stdin);
//freopen(PROB".out","w",stdout);
freopen("input.txt","r",stdin);
int n,m;
scanf("%d%d",&n,&m);
int i,j,k,x,y;
real z;
real l,r,mid;
l=r=;
for (i=;i<m;i++)
{
scanf("%d%d%Lf",&x,&y,&z);
x--;y--;
addedge(x,y,z);
// addedge(y,x,z);
if(z<)l+=z;
else r+=z;
}
bool flag;
while (l+1e-<r)
{
mid=(l+r)/;
for (i=;i<=n;i++)dst[i]=,state[i]=false;;
flag=false;
for (i=;i<=tope;i++)E[i].val-=mid;
for (i=;i<=n;i++)
{
if (dfs(i))
{
flag=true;
break;
}
}
for(i=;i<=tope;i++)E[i].val+=mid;
if (flag)
{
r=mid;
}else
{
l=mid;
}
}
printf("%.8Lf\n",(real)r);
}
bzoj 1486: [HNOI2009]最小圈 dfs求负环的更多相关文章
- BZOJ 1486: [HNOI2009]最小圈( 二分答案 + dfs判负圈 )
二分答案m, 然后全部边权减掉m, 假如存在负圈, 那么说明有平均值更小的圈存在. 负圈用dfs判断. ------------------------------------------------ ...
- [HNOI2009]最小圈 (二分答案+负环)
题面:[HNOI2009]最小圈 题目描述: 考虑带权的有向图\(G=(V,E)\)以及\(w:E\rightarrow R\),每条边\(e=(i,j)(i\neq j,i\in V,j\in V) ...
- [BZOJ 1486][HNOI2009]最小圈(二分答案+dfs写的spfa判负环)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1486 分析:容易想到先二分答案x,然后把所有边的权值-x,那么如果图中存在权值和为0的 ...
- bzoj 1486: [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 HIN ...
- BZOJ 1486: [HNOI2009]最小圈 [01分数规划]
裸题...平均权值最小的环.... 注意$dfs-spfa$时$dfs(cl)$...不要写成$dfs(u)$ #include <iostream> #include <cstdi ...
- 1486: [HNOI2009]最小圈 - BZOJ
在机房的小伙伴提醒是二分之后,我想到了是判负环,所以我用spfa,而且我保持dis都是小于等于0,本以为这样就能过了,可是还是有一个点达到了3.8s左右(其他都是0.0几秒) 所以还是写了dfs版 ...
- 【BZOJ】1486 [HNOI2009]最小圈
[算法]二分+spfa [题解]据说这个叫分数规划? 0-1分数规划 二分答案a,则对于任意的环有w/k≤a即w-ak≤0,若满足条件则a变小,否则a变大. 因为w=w1+w2+...+wk,所以变形 ...
- 1486: [HNOI2009]最小圈
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 3129 Solved: 1543[Submit][Status][Discuss] Descripti ...
- bzoj千题计划227:bzoj1486: [HNOI2009]最小圈
http://www.lydsy.com/JudgeOnline/problem.php?id=1486 二分答案 dfs版spfa判负环 #include<queue> #include ...
随机推荐
- Android开发_Android数据的四种存储方式
Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File.由于Android系统中,数据基本都是私有的的,都是存放 ...
- NVMe 与 AHCI
http://elf8848.iteye.com/blog/1731274 AHCI: NCQ技术,600MB/S,一个队列,每个队列32个指令 NVME:65000个队列,每个队列65000指令,3 ...
- apache kafka源码分析-Producer分析---转载
原文地址:http://www.aboutyun.com/thread-9938-1-1.html 问题导读1.Kafka提供了Producer类作为java producer的api,此类有几种发送 ...
- 编写跨平台代码之memory alignment
编写网络包(存储在堆上)转换程序时,在hp-ux机器上运行时会遇到 si_code: 1 - BUS_ADRALN - Invalid address alignment. Please refer ...
- 文件MD5查看器工具与源码实现及下载
由于工作中经常需要查看文件的MD5值,先前网上找了几个MD5值查看工具,但基本都是选择文件,还没有复制功能,于是今天我就自己编写了个MD5查看工具,支持文件拖拽查看,并可以复制功能. 由于本工具比较小 ...
- ssh 无密码登录远程服务器
在讲下文之前,我都默许大家都已经生成了自己的ssh公钥和密钥,在自己的~/.ssh 目录下面,如果没有,请使用 ssh-keygen -t rsa -C "你的邮箱" 命令生成 1 ...
- order by跟group by 跟having----------------sum() 求和 avg()求平均 count() 求个数--------------like
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoEAAACdCAIAAABEujUmAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWX ...
- 浅谈Mamcached集成web项目
1.资源文件配置 config.properties 添加 #memcached服务器地址 memchchedIP=192.168.1.8 2.编写工具类 MemUtils package cn.co ...
- mysql连接错误:Cannot get hostname for your address
问题 环境:win7 + 64Bit + 本地mysql5.6 问题:navicat连接本地mysql数据库,提示“Cannot get hostname for your address”,但是连接 ...
- SqlSugar-事务操作
一.事务操作实例 特别说明: 1.特别说明:在事务中,默认情况下是使用锁的,也就是说在当前事务没有结束前,其他的任何查询都需要等待 2.ReadCommitted:在正在读取数据时保持共享锁,以避免脏 ...