二分答案是显然的,我们需要dfs版spfa判一下负环。

看起来是n^2其实很快。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxv 3050
#define maxe 10050
#define eps 1e-9
#define inf 0x7f7f7f7f7f7f7f7fLL
using namespace std;
struct edge
{
int v,nxt;
double c,w;
}e[maxe];
int n,m,x,y,g[maxv],nume=,flag;
double z,dis[maxv],l,r,ans;
bool vis[maxv];
void addedge(int u,int v,double w)
{
e[++nume].v=v;e[nume].c=w;
e[nume].nxt=g[u];g[u]=nume;
}
void rebuild(double x)
{
for (int i=;i<=nume;i++)
e[i].w=e[i].c-x;
}
void dfs(int x)
{
vis[x]=true;
for (int i=g[x];i;i=e[i].nxt)
{
int v=e[i].v;
if (dis[v]>dis[x]+e[i].w)
{
if (!vis[v]) {dis[v]=dis[x]+e[i].w;dfs(v);}
else {flag=;break;}
}
}
vis[x]=false;
}
bool check(double x)
{
rebuild(x);flag=;
for (int i=;i<=n;i++) {vis[i]=false;dis[i]=;}
for (int i=;i<=n;i++)
{
dfs(i);
if (flag) return true;
}
return false;
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=m;i++)
{
scanf("%d%d%lf",&x,&y,&z);
addedge(x,y,z);
}
ans=-;l=-inf;r=inf;
while (r-l>=eps)
{
double mid=(l+r)/;
if (check(mid)) r=mid;
else {ans=mid;l=mid;}
}
printf("%.8lf\n",ans);
return ;
}

BZOJ 1486 最小圈的更多相关文章

  1. BZOJ 1486 最小圈(01分数规划)

    好像是很normal的01分数规划题.最小比率生成环. u(c)=sigma(E)/k.转化一下就是k*u(c)=sigma(E). sigma(E-u(c))=0. 所以答案对于这个式子是有单调性的 ...

  2. bzoj 1486: [HNOI2009]最小圈 dfs求负环

    1486: [HNOI2009]最小圈 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1022  Solved: 487[Submit][Status] ...

  3. BZOJ 1486: [HNOI2009]最小圈( 二分答案 + dfs判负圈 )

    二分答案m, 然后全部边权减掉m, 假如存在负圈, 那么说明有平均值更小的圈存在. 负圈用dfs判断. ------------------------------------------------ ...

  4. bzoj千题计划227:bzoj1486: [HNOI2009]最小圈

    http://www.lydsy.com/JudgeOnline/problem.php?id=1486 二分答案 dfs版spfa判负环 #include<queue> #include ...

  5. 1486: [HNOI2009]最小圈

    Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 3129  Solved: 1543[Submit][Status][Discuss] Descripti ...

  6. BZOJ1486 HNOI2009 最小圈 【01分数规划】

    BZOJ1486 HNOI2009 最小圈 Description 应该算是01分数规划的裸板题了吧..但是第一次写还是遇到了一些困难,vis数组不清零之类的 假设一个答案成立,那么一定可以找到一个环 ...

  7. 【BZOJ1486】最小圈(分数规划)

    [BZOJ1486]最小圈(分数规划) 题面 BZOJ 洛谷 求图中边权和除以点数最小的环 题解 分数规划 二分答案之后将边权修改为边权减去二分值 检查有无负环即可 #include<iostr ...

  8. bzoj1486【HNOI2009】最小圈

    1486: [HNOI2009]最小圈 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1778  Solved: 827 [Submit][Statu ...

  9. [HNOI2009]最小圈

    题目描述 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过k个节点,那么一个圈的平均值为圈上k条边权的和除以k,现要求其中的最小值 输入输出格式 输入格式: 第一行2个正整数,分别为 ...

随机推荐

  1. JSON Viewer

    http://jsonviewer.codeplex.com/ jsoneditor https://github.com/josdejong/jsoneditor

  2. Java 集合系列 17 TreeSet

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  3. poj1122 FDNY to the Rescue!(dij+反向建图+输出路径)

    题目链接:poj1122 FDNY to the Rescue! 题意:给出矩阵,矩阵中每个元素tij表示从第i个交叉路口到第j个交叉路口所需时间,若tij为-1则表示两交叉路口之间没有直接路径,再给 ...

  4. js便签笔记(13)——jsonp其实很简单【ajax跨域请求】

    前两天被问到ajax跨域如何解决,还真被问住了,光知道有个什么jsonp,迷迷糊糊的没有说上来.抱着有问题必须解决的态度,我看了许多资料,原来如此... 为何一直知道jsonp,但一直迷迷糊糊的不明白 ...

  5. backbonejs中的模型篇(三)

    一:在模型中使用嵌套属性 Backbone的扩展插件 Backbone-Nested下载并添加引用 1:定义一个新的模型对象,使用Backbone.NestedModel作为其基类对象 var _mo ...

  6. uva 12186

    12186 - Another Crisis Time limit: 3.000 seconds A couple of years ago, a new world wide crisis star ...

  7. 137. Single Number II——问题是查找,本质是hash查找,只是记录的是32 bit中各个位出现次数而已

    Given an array of integers, every element appears three times except for one. Find that single one. ...

  8. 转 velocity 模板使用总结

    Velocity是一个基于java的模板引擎.它允许任何人仅仅简单的使用模板语言来引用由java代码定义的对象. 当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一 ...

  9. 微信浏览器——User Agent

    在iPhone 返回 Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gec ...

  10. android 获取activity 的name

    String contextString = this.toString();String name = contextString.substring(contextString.lastIndex ...