在机房的小伙伴提醒是二分之后,我想到了是判负环,所以我用spfa,而且我保持dis都是小于等于0,本以为这样就能过了,可是还是有一个点达到了3.8s左右(其他都是0.0几秒)
所以还是写了dfs版本,还是一样每次都保持dis小于等于0,当发现有一个点在栈中,你又可以更新他的dis,那么就有负环了
 const
maxn=;
maxm=;
inf=;
var
first:array[..maxn]of longint;
next,last:array[..maxm]of longint;
w:array[..maxm]of double;
n,m:longint; procedure init;
var
i,x:longint;
begin
read(n,m);
for i:= to m do
begin
read(x);
read(last[i],w[i]);
next[i]:=first[x];
first[x]:=i;
end;
end; var
flag,vis:array[..maxn]of longint;
dis:array[..maxn]of double;
time,time2:longint;
ans:double; function dfs(x:longint;f:double):boolean;
var
i:longint;
begin
flag[x]:=time;
vis[x]:=time2;
dis[x]:=f;
i:=first[x];
while i<> do
begin
if f+w[i]-ans<= then
begin
if vis[last[i]]=time2 then
if dis[last[i]]>=f+w[i]-ans then exit(true);
if vis[last[i]]<>time2 then
if dfs(last[i],f+w[i]-ans) then exit(true);
end;
i:=next[i];
end;
vis[x]:=time2-;
exit(false);
end; procedure work;
var
i:longint;
l,r:double;
f:boolean;
begin
l:=-;
r:=-l;
while r-l>1e-9 do
begin
ans:=(l+r)/;
inc(time);
f:=false;
for i:= to n do
if flag[i]<>time then
begin
inc(time2);
if dfs(i,) then
begin
f:=true;
break;
end;
end;
if f then r:=ans
else l:=ans;
end;
writeln(ans::);
end; begin
init;
work;
end.

1486: [HNOI2009]最小圈 - BZOJ的更多相关文章

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

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

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

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

  3. 1486: [HNOI2009]最小圈

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

  4. [BZOJ 1486][HNOI2009]最小圈(二分答案+dfs写的spfa判负环)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1486 分析:容易想到先二分答案x,然后把所有边的权值-x,那么如果图中存在权值和为0的 ...

  5. BZOJ 1486: [HNOI2009]最小圈 [01分数规划]

    裸题...平均权值最小的环.... 注意$dfs-spfa$时$dfs(cl)$...不要写成$dfs(u)$ #include <iostream> #include <cstdi ...

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

  7. 【BZOJ】1486 [HNOI2009]最小圈

    [算法]二分+spfa [题解]据说这个叫分数规划? 0-1分数规划 二分答案a,则对于任意的环有w/k≤a即w-ak≤0,若满足条件则a变小,否则a变大. 因为w=w1+w2+...+wk,所以变形 ...

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

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

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

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

随机推荐

  1. slickgrid 一个优秀的JS表格插件

    从熟悉JS以来,慢慢的喜欢上了这个门语言. 不自觉的,看了好多js的知识,可能也是因为做项目的原因吧. 这里稍微说下一个JS的grid插件 --slickgrid 了解这个插件也不是很多,稍微了解了下 ...

  2. Java中Properties类的学习总结

    学习目标: 1.认识properties文件,理解其含义,会正确创建properties文件. 2.会使用java.util.Properties类来操作properties文件. 一.认识prope ...

  3. Objective-C 【电商APP应用代码-系统分析-详细注释-代码实现】

    ------------------------------------------- 电商APP应用 ************************************************ ...

  4. 让apache与mysql随着系统自动启动

    让apache与mysql随着系统自动启动 在Linux中有一个文件/etc/rc.d/rc.local文件,其系统在启动时会自动加载该文件,我们可以把要启动的服务放入这个文件中即可. 添加以下代码:

  5. c++学习——类成员的访问权限

    成员的访问权限 Public: 任何人,尤其是那些要使用这个类库的客户程序员,都能访问那个紧跟在public 后面声明的成员. 默认的package: 在同一个目录里面的文件,并且都没有明确指明它是属 ...

  6. DataGrid3

    a标签,DataGrid的数据绑定 1.function aa(id, url) {            //alert(id);            window.open(url + '&am ...

  7. age

    #include<iostream> #include<math.h> #define pi 3.14 using namespace std; int main() { in ...

  8. BCB6中SCALERICHVIEW加入GIF动画

    记载下,花了不少时间. 1.  项目导入文件GIFImage.pas 来源:http://melander.dk/delphi/gifimage/ 2.  项目导入文件RVGifAnimate.pas ...

  9. 《APUE》第四章笔记(4)

    这算是在博客园写的第一篇文章啊,之前都在csdn写(虽然才写了几篇,因为开通也没多少天..),还是稍微期待下吧.我写博客的主要意图是一来能够记录下来自己所学过的东西,二来也想能够跟大家交流,能够得到更 ...

  10. linux中nodejs后台运行工具forever

    forever让nodejs应用后台执行 命令如下: forever start './bin/www' nodejs一般是当成一条用户命令执行的,当用户断开客户连接,运用也就停了,很烦人.如何让no ...