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求负环的更多相关文章

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

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

  2. [HNOI2009]最小圈 (二分答案+负环)

    题面:[HNOI2009]最小圈 题目描述: 考虑带权的有向图\(G=(V,E)\)以及\(w:E\rightarrow R\),每条边\(e=(i,j)(i\neq j,i\in V,j\in V) ...

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

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

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

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

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

  6. 1486: [HNOI2009]最小圈 - BZOJ

      在机房的小伙伴提醒是二分之后,我想到了是判负环,所以我用spfa,而且我保持dis都是小于等于0,本以为这样就能过了,可是还是有一个点达到了3.8s左右(其他都是0.0几秒) 所以还是写了dfs版 ...

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

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

  8. 1486: [HNOI2009]最小圈

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

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

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

随机推荐

  1. Android开发之隐藏Activity(活动)的标题

    隐藏一个活动的标题(如您打算向用户显示状态更新时),可以使用requestWindowFeature()方法,传递Window.FEATURE_NO_TITLE常量来控制.实现如下: protecte ...

  2. Android(java)学习笔记191:Android数据存储5种方式总结

    1.使用文件(File)存储 存储一般的数据 2.使用sharedperference(xml) 存储设置信息.配置信息.密码 3.数据库Sqlite 开源的,嵌入式的数据库,轻量级 4.使用Cont ...

  3. Cracking the coding interview-String

    关于字符串 问题描述:一般这类程序设计的题目较简单,通过设计字符串的反转,寻找子串,以及字符串的拼接.删除操作等问题. 问题 实现一个算法来判断一个字符串中的字符是否唯一(即没有重复)? 设计算法并写 ...

  4. Prototype 原型模式

    用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式即在运行时动态的通过一个对象的实例来创建这个类的对象,可以理解成通过一个实例克隆出另一个实例. Prototype模式的一些优 ...

  5. 利用jquery实现百度新闻导航菜单滑动动画

    前言 前两天,群里有人问百度新闻导航是如何实现的,当时由于忙于工作,没有来得及细看,恰好今天有空闲时间,索性就实现一下这个效果吧: 思路与步骤 1.利用UL创建简单横向导航: <!DOCTYPE ...

  6. innosetup 安装静默安装msi,指定安装路径的方法

    自己看了很久帮助,分号的用法确实不太好用,湿了这个东东估计很多人会用到,发出来给大家参考. Filename: "{app}/msiexec.exe";Parameters: &q ...

  7. 读取Excel异常定义了过多字段的解决方法

    /// <summary> /// 从Excel文件导入数据 /// </summary> /// <param name="ExcelStr"> ...

  8. Microsoft SQL Server 管理 (常用管理及维护命令)

    --查询当前连接的实例名 select @@servername --察看任何数据库属性 sp_helpdb master --设置单用户模式,同时立即断开所有用户 alter database No ...

  9. A题笔记(2)

    No. 1505 文件读相关 #include <fstream> #include <sstream> <fstream>支持文件的IO <sstream& ...

  10. swift 遍历

    最简单的一个遍历数组 for 随便起个名字 in 升级 上面的看不懂的话,这个应该会简单点 import UIKit let interestingNumbers = [ ,,,,,], ,,,,,] ...