链接:

#include <stdio.h>
int main()
{
puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢");
puts("网址:blog.csdn.net/vmurder/article/details/46348771");
}

题解:

分数规划Qwq。

然而它卡判点入n次的那种spfa推断负环。

于是有了一种黑科技:

我们从枚举点 i 開始 dfs 。然后扫到点 j 时。保持 i~j 这一条链上的点被标记,然后强行推断再扫一个点 k 时。是否会到这个链上,然后是不是能又一次更新此点 k 与 i 的距离。。。

这个东西是指数级别时间复杂度的。然而却能够过这道题。

代码:

#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 3010
#define M 10100
#define eps 1e-8
using namespace std;
double mid;
struct Eli
{
int v,n;
double f,l;
void re(){l=f-mid;}
}e[M];
int head[N],cnt;
inline void add(int u,int v,double l)
{
e[++cnt].v=v;
e[cnt].f=l;
e[cnt].n=head[u];
head[u]=cnt;
} int n,m;
bool vis[N];
double dist[N];
bool dfs(int x)
{
vis[x]=1;
int i,v;
for(i=head[x];i;i=e[i].n)
{
v=e[i].v;
if(dist[v]>dist[x]+e[i].l)
{
if(vis[v])
{
vis[x]=0;
return 1;
}
else {
dist[v]=dist[x]+e[i].l;
if(dfs(v))
{
vis[x]=0;
return 1;
}
}
}
}
vis[x]=0;
return 0;
} bool check()
{
memset(dist,0,sizeof dist);
for(int i=1;i<=m;i++)e[i].re();
for(int i=1;i<=n;i++)if(dfs(i))return 1;
return 0;
}
int main()
{
int i,a,b;
double c; scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d%lf",&a,&b,&c);
add(a,b,c);
}
double l=-1e7,r=1e7;
for(i=60;i--;)
{
mid=(l+r)/2.0;
if(check())r=mid;
else l=mid;
}
printf("%.8lf\n",l);
return 0;
}

【BZOJ1486】【HNOI2009】最小圈 分数规划 dfs判负环。的更多相关文章

  1. [HNOI2009]最小圈 分数规划 spfa判负环

    [HNOI2009]最小圈 分数规划 spfa判负环 题面 思路难,代码简单. 题目求圈上最小平均值,问题可看为一个0/1规划问题,每个边有\(a[i],b[i]\)两个属性,\(a[i]=w(u,v ...

  2. [bzoj1486][HNOI2009]最小圈——分数规划+spfa+负环

    题目 传送门 题解 这个题是一个经典的分数规划问题. 把题目形式化地表示,就是 \[Minimize\ \lambda = \frac{\sum W_{i, i+1}}{k}\] 整理一下,就是 \[ ...

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

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

  4. 【bzoj1486】[HNOI2009]最小圈 分数规划+Spfa

    题目描述 样例输入 4 5 1 2 5 2 3 5 3 1 5 2 4 3 4 1 3 样例输出 3.66666667 题解 分数规划+Spfa判负环 二分答案mid,并将所有边权减去mid,然后再判 ...

  5. 2018.09.24 bzoj1486: [HNOI2009]最小圈(01分数规划+spfa判负环)

    传送门 答案只保留了6位小数WA了两次233. 这就是一个简单的01分数规划. 直接二分答案,根据图中有没有负环存在进行调整. 注意二分边界. 另外dfs版spfa判负环真心快很多. 代码: #inc ...

  6. 【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 ...

  7. [P1768]天路(分数规划+SPFA判负环)

    题目描述 “那是一条神奇的天路诶~,把第一个神犇送上天堂~”,XDM先生唱着这首“亲切”的歌曲,一道猥琐题目的灵感在脑中出现了. 和C_SUNSHINE大神商量后,这道猥琐的题目终于出现在本次试题上了 ...

  8. bzoj1690:[Usaco2007 Dec]奶牛的旅行(分数规划+spfa判负环)

    PS:此题数组名皆引用:戳我 题目大意:有n个点m条有向边的图,边上有花费,点上有收益,点可以多次经过,但是收益不叠加,边也可以多次经过,但是费用叠加.求一个环使得收益和/花费和最大,输出这个比值. ...

  9. Luogu3199 HNOI2009 最小圈 分数规划、SPFA

    传送门 可以发现它的式子是一个分数规划的式子,所以可以二分答案,将所有边权减掉当前二分值之后跑一边$SPFA$判断负环即可. 然而这道题把$BFS-SPFA$卡掉了却没卡$DFS-SPFA$ 出题人: ...

随机推荐

  1. setFocusable、setEnabled、setClickable区别

    setClickable  设置为true时,表明控件可以点击,如果为false,就不能点击:“点击”适用于鼠标.键盘按键.遥控器等:注意,setOnClickListener方法会默认把控件的set ...

  2. VC++6.0连接Access数据库

    建立一个连接数据库的类: 1.头文件:ADOConn.h #import "C:\Program Files\Common Files\System\ado\msado15.dll" ...

  3. JQuery插件的学习

    此前一直想就关于Jquery插件的开发,做一个深入的学习,由于各种原因,当然主要是自己太懒了...今天就系统分析一下Jquery插件的开发(参考了http://www.xprogrammer.com/ ...

  4. 【转】Yahoo!团队:网站性能优化的35条黄金守则

    Yahoo!的 Exceptional Performance团队为改善 Web性能带来最佳实践.他们为此进行了一系列的实验.开发了各种工具.写了大量的文章和博客并在各种会议上参与探讨.最佳实践的核心 ...

  5. Java 性能分析工具

    如何利用 JConsole观察分析Java程序的运行,进行排错调优 http://jiajun.iteye.com/blog/810150 如何使用JVisualVM进行性能分析 http://jia ...

  6. Spark系列(八)Worker工作原理

    工作原理图   源代码分析 包名:org.apache.spark.deploy.worker 启动driver入口点:registerWithMaster方法中的case LaunchDriver ...

  7. Gym 100507A About Grisha N. (水题)

    About Grisha N. 题目链接: http://acm.hust.edu.cn/vjudge/contest/126546#problem/A Description Grisha N. t ...

  8. Quality Center 使用IE8异常浏览器打开

    需要装2个软件 1.  Microsoft Visual C++ 2005 Redistributable Package (x64) 2.  dotnetfx35.exe 配置IE的选项 使用兼容模 ...

  9. Linux 的进程组、会话、守护进程

    一.进程组ID 每个进程都属于一个进程组.每个进程组有一个领头进程.进程组是一个或多个进程的集合,通常它们与一组作业相关联,可以接受来自同一终端的各种信号.每个进程组都有唯一的进程组ID(整数,也可以 ...

  10. 在Android4.0中Contacts拨号盘界面剖析(源码)

      通过在 ViewPager 的适配器对象中,发现过一下三行代码 private DialpadFragment mDialpadFragment; private CallLogFragment ...