传送门


可以发现它的式子是一个分数规划的式子,所以可以二分答案,将所有边权减掉当前二分值之后跑一边$SPFA$判断负环即可。

然而这道题把$BFS-SPFA$卡掉了却没卡$DFS-SPFA$

出题人:想不到吧

然而这道题目其实是有结论的,具体可以去看rqy聚聚的blog,反正我是看不懂

// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define ld long double
#define eps 1e-10
//This code is written by Itst
using namespace std;

inline int read(){
    ;
    ;
    char c = getchar();
    while(c != EOF && !isdigit(c)){
        if(c == '-')
            f = ;
        c = getchar();
    }
    while(c != EOF && isdigit(c)){
        a = (a << ) + (a << ) + (c ^ ');
        c = getchar();
    }
    return f ? -a : a;
}

 , MAXM = ;
struct Edge{
    int end , upEd;
    ld w;
}Ed[MAXM];
ld minDis[MAXN];
int head[MAXN] , flo[MAXN] , N , M , cntEd;
queue < int > q;
bool inq[MAXN] , vis[MAXN];

inline void addEd(int a , int b , ld c){
    Ed[++cntEd].end = b;
    Ed[cntEd].upEd = head[a];
    head[a] = cntEd;
    Ed[cntEd].w = c;
}

/*bool SPFA(){
    memset(minDis , 0 , sizeof(minDis));
    for(int i = 1 ; i <= N ; ++i){
        if(!inq[i]){
            inq[i] = 1;
            q.push(i);
        }
        flo[i] = 1;
    }
    while(!q.empty()){
        int t = q.front();
        q.pop();
        inq[t] = 0;
        for(int i = head[t] ; i ; i = Ed[i].upEd)
            if(minDis[Ed[i].end] > minDis[t] + Ed[i].w + eps){
                minDis[Ed[i].end] = minDis[t] + Ed[i].w;
                flo[Ed[i].end] = flo[t] + 1;
                if(flo[Ed[i].end] > N)
                    return 1;
                if(!inq[Ed[i].end]){
                    inq[Ed[i].end] = 1;
                    q.push(Ed[i].end);
                }
            }
    }
    return 0;
    }*/
bool SPFA(int now){
    vis[now] = ;
    for(int i = head[now] ; i ; i = Ed[i].upEd)
        if(minDis[Ed[i].end] > minDis[now] + Ed[i].w)
            if(vis[Ed[i].end])
                ;
            else{
                minDis[Ed[i].end] = minDis[now] + Ed[i].w;
                if(SPFA(Ed[i].end))
                    ;
            }
    vis[now] = ;
    ;
}

inline void add(ld num){
     ; i <= cntEd ; ++i)
        Ed[i].w += num;
}

bool check(ld mid){
    ;
    add(-mid);
    memset(minDis ,  , sizeof(minDis));
    memset(vis ,  , sizeof(vis));
     ; !f && i <= N ; ++i)
         && minDis[i] < 1e-)
            f = SPFA(i);
    add(mid);
    return f;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("3199.in" , "r" , stdin);
    //freopen("3199.out" , "w" , stdout);
#endif
    N = read();
    M = read();
     ; i <= M ; ++i){
        int a = read() , b = read();
        ld c;
        scanf("%Lf" , &c);
        addEd(a , b , c);
    }
    ld L = -1e7 , R = 1e7;
    while(R - L > eps){
        ld mid = (L + R) / ;
        check(mid) ? R = mid : L = mid;
    }
    printf("%.8Lf" , L);
    ;
}

Luogu3199 HNOI2009 最小圈 分数规划、SPFA的更多相关文章

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

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

  2. 【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,然后再判 ...

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

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

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

  5. 【BZOJ1486】【HNOI2009】最小圈 分数规划 dfs判负环。

    链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...

  6. BZOJ_1486_[HNOI2009]最小圈_01分数规划

    BZOJ_1486_[HNOI2009]最小圈_01分数规划 Description Input Output Sample Input 4 5 1 2 5 2 3 5 3 1 5 2 4 3 4 1 ...

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

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

  8. 【算法】01分数规划 --- HNOI2009最小圈 & APIO2017商旅 & SDOI2017新生舞会

    01分数规划:通常的问法是:在一张有 \(n\) 个点,\(m\) 条边的有向图中,每一条边均有其价值 \(v\) 与其代价 \(w\):求在图中的一个环使得这个环上所有的路径的权值和与代价和的比率最 ...

  9. Bzoj1486/洛谷P3199 最小圈(0/1分数规划+spfa)/(动态规划+结论)

    题面 Bzoj 洛谷 题解(0/1分数规划+spfa) 考虑\(0/1\)分数规划,设当前枚举到的答案为\(ans\) 则我们要使(其中\(\forall b_i=1\)) \[ \frac{\sum ...

随机推荐

  1. Docker简单使用

    镜像是一种轻量级.可执行的独立软件包,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件. 容器是镜像的运行时实例 - 实际执行时镜像会在内存中变成什么.默认情况下,它完全独立 ...

  2. Tomcat 8默认工具manager管理页面访问配置

    Tomcat 8默认工具manager管理页面访问配置 1. 分配相关的角色权限 需要配置的配置文件是${catalina.home}/conf/tomcat-users.xml先给Tomcat访问相 ...

  3. 基于Jmeter和Testlink的自动化测试框架研究与实施

    关于测试框架搭建的详细过程,会在另一篇文章中详细介绍:http://www.cnblogs.com/leeboke/p/6145977.html 摘 要 目前基于Jmeter的接口自动化测试框架,大多 ...

  4. Python之逻辑回归

    代码: import numpy as np from sklearn import datasets from sklearn.linear_model import LogisticRegress ...

  5. php二维数组去重

    php二维数组去重 前言:php一维数组去重很简单,直接array_unique($arr)即可,但是二维数组去重就得自己去写了 二维数组去重方法: /* * 二维数组去重 * 注意:二维数组中的元素 ...

  6. php解决前后端验证字符串长度不一致

    前端代码 function getStrleng(str){ var myLen =0; for(var i=0;i<str.length;i++){ if(str.charCodeAt(i)& ...

  7. zabbix监控VMware6.7

    1.登录VMwareweb页面 管理--高级配置启用:Config.HostAgent.plugins.solo.enableMob 2.测试(记住这个UUID) https://10.155.0.8 ...

  8. Hp电脑开机报错:no boot disk has been detected or the disk has failed

    hp主机开机报错no boot disk has been detected  or the disk has failed,重启之后没有作用,开机之后仍然是同样界面.考虑是硬盘问题,按ESC+F10 ...

  9. January 09th, 2018 Week 02nd Tuesday

    Use the smile to change the world. Don't let the world change your smile. 用你的笑容去改变这个世界,别让这个世界改变了你的笑容 ...

  10. 关于RBAC(Role-Base Access Control)的理解(转)

    基于角色的访问控制(Role-Base Access Control) 有两种正在实践中使用的RBAC访问控制方式:隐式(模糊)的方式和显示(明确)的方式. 今天依旧有大量的软件应用是使用隐式的访问控 ...