BZOJ 1486 最小圈
二分答案是显然的,我们需要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 最小圈的更多相关文章
- BZOJ 1486 最小圈(01分数规划)
好像是很normal的01分数规划题.最小比率生成环. u(c)=sigma(E)/k.转化一下就是k*u(c)=sigma(E). sigma(E-u(c))=0. 所以答案对于这个式子是有单调性的 ...
- bzoj 1486: [HNOI2009]最小圈 dfs求负环
1486: [HNOI2009]最小圈 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1022 Solved: 487[Submit][Status] ...
- BZOJ 1486: [HNOI2009]最小圈( 二分答案 + dfs判负圈 )
二分答案m, 然后全部边权减掉m, 假如存在负圈, 那么说明有平均值更小的圈存在. 负圈用dfs判断. ------------------------------------------------ ...
- bzoj千题计划227:bzoj1486: [HNOI2009]最小圈
http://www.lydsy.com/JudgeOnline/problem.php?id=1486 二分答案 dfs版spfa判负环 #include<queue> #include ...
- 1486: [HNOI2009]最小圈
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 3129 Solved: 1543[Submit][Status][Discuss] Descripti ...
- BZOJ1486 HNOI2009 最小圈 【01分数规划】
BZOJ1486 HNOI2009 最小圈 Description 应该算是01分数规划的裸板题了吧..但是第一次写还是遇到了一些困难,vis数组不清零之类的 假设一个答案成立,那么一定可以找到一个环 ...
- 【BZOJ1486】最小圈(分数规划)
[BZOJ1486]最小圈(分数规划) 题面 BZOJ 洛谷 求图中边权和除以点数最小的环 题解 分数规划 二分答案之后将边权修改为边权减去二分值 检查有无负环即可 #include<iostr ...
- bzoj1486【HNOI2009】最小圈
1486: [HNOI2009]最小圈 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1778 Solved: 827 [Submit][Statu ...
- [HNOI2009]最小圈
题目描述 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过k个节点,那么一个圈的平均值为圈上k条边权的和除以k,现要求其中的最小值 输入输出格式 输入格式: 第一行2个正整数,分别为 ...
随机推荐
- [bootstrap] 栅格系统和布局
1.简介 栅格系统(grid systems),也称为“网格系统”,运用固定的格子设计版面布局,风格工整简洁.是从平面栅格系统演变而来. Bootstrap建立在12列栅格系统.布局.组件之上.以规则 ...
- 简单的百度贴吧爬虫实现(urllib)
环境:ubuntu 16.04 LTS (X86-64),pycharm python版本 :3.5.1+ #生成的文件默认会保存到代码所在根目录 1 import urllib.request, ...
- Windows安装Python图像处理库:PIL模块
平常一般都在Linux下用Python,今天女票突然说让帮忙把一些图片全部弄成一个分辨率的,作为程序员,这种重复的工作还是交给计算机吧. 废话不多说,打开Cmd看下Windows的python下面是否 ...
- ODBC 小例
#include "stdafx.h"#include <windows.h>#include <stdio.h>#include <iostream ...
- Ubuntu 13.10 Broadcom BCM4313问题
开始找不到无线网卡,后来不知道怎么就出来了,但是速度很慢.用下面的方法解决的(我也不知道哪条命令起的作用,反正现在正常了): sudo apt-get remove --purge bcmwl-ker ...
- linux修改系统时间和linux查看时区、修改时区的方法
一.查看和修改Linux的时区 1. 查看当前时区命令 : "date -R" 2. 修改设置Linux服务器时区方法 A命令 : "tzselect" 方法 ...
- php解压zip文件
<?php header("Content-type:text/html;charset=utf-8"); function get_zip_originalsize($fi ...
- http://bootswatch.com/
http://bootswatch.com/ http://v3.bootcss.com/examples/dashboard/
- Debugger Exception Notification
--------------------------- Debugger Exception Notification --------------------------- Project PJSP ...
- bitset常用函数用法记录 (转载)
有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值.位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法.标准库提供了bitset类使得处理位集合更容易一些.要使 ...