在机房的小伙伴提醒是二分之后,我想到了是判负环,所以我用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. AsyncQueryHandler 和 CursorAdapter的使用

    AsyncQueryHandler A helper class to help make handling asynchronous ContentResolver queries easier. ...

  2. Part 72 to 81 Talking about Dictionary and List collection in C#

    Part 72   What is dictionary in c# Part 73   What is dictionary in c# continued Part 74   List colle ...

  3. spark写入Oracle 报错 java.lang.ArrayIndexOutOfBoundsException: -32423

    原因: oracle 10g的驱动执行的批量提交只支持32768个参数,如果表的字段多于32个,就会出现该异常 解决办法: 升级oracle的驱动版本,换成ojdbc6.jar

  4. 几款jQuery右键菜单插件

    1.jQuery Very Simple ContextMenu Plugin 2.ContextJS Project Page:http://lab.jakiestfu.com/contextjs/ ...

  5. MIME类型大全

    获取MIME:HttpContext.Current.Request.Files[fileKey].ContentLength MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该 ...

  6. 转: 理解Python的With语句

    Python’s with statement provides a very convenient way of dealing with the situation where you have ...

  7. Static的使用

    (一) 当它用于函数定义时,或用于代码块之外的变量声明时,static关键字用于修饰修改标识符的连接属性,从external改为internal,但是标识符的存储类型和作用域不受影响.用这种方式声明的 ...

  8. VBA访问SQLSERVER2005筛选数据库

    EXCEL版本2010, 引用 Private Sub CommandButton1_Click() Dim conn As New ADODB.Connection Dim rs As New AD ...

  9. RSS 订阅

    <?xml version="1.0"?><%@ Page Language="C#" AutoEventWireup="true& ...

  10. <linux下sysctl指令详解>

    Sysctl指令是对系统核心参数的设置: 用法: -a 参数列出系统中所有核心设置 当然了这些核心的设置都是文件,存放于/proc/sys/net目录下. 举个有代表性的例子: net.ipv4.ic ...