SPFA+0/1分数规划。

CODE:

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;

#define MAXN 1010
#define INF 0X3F3F3F3F
#define eps 1e-7

struct Edge
{
    int v, next;
    double w;
}edge[MAXN*5];

double d[MAXN], num[MAXN];
int first[MAXN];

int n, m, cnt;

void init()
{
    cnt = 0;
    memset(first, -1, sizeof(first));
}

void read_graph(int u, int v, double w)
{
    edge[cnt].v = v, edge[cnt].w = w;
    edge[cnt].next = first[u], first[u] = cnt++;
}

int spfa(int src, double mid)
{
    queue<int> q;
    bool inq[MAXN] = {0};
    int ct[MAXN] = {0};
    for(int i = 1; i <= n; i++) d[i] = (i == src)?0:INF;
    q.push(src);
    while(!q.empty())
    {
        int x = q.front(); q.pop();
        inq[x] = 0, ct[x]++;
        if(ct[x] >= n) return 0; //存在负环 
        for(int e = first[x]; e != -1; e = edge[e].next)
        {
            int v = edge[e].v;
            double w = -num[v] + mid*edge[e].w;
            if(d[v] > d[x] + w)
            {
                d[v] = d[x] + w;
                if(!inq[v])
                {
                    inq[v] = 1;
                    q.push(v);
                }
            }
        }
    }
    return 1;
}

double BSearch()
{
    double x = 0, y = 100.0, ans;
    while((y-x) > eps)
    {
        double mid = x+(y-x)/2;
        if(spfa(1, mid))
        {
            ans = mid;
            y = mid;
        }
        else x = mid;
    }
    return ans;
}

int main()
{
    scanf("%d%d", &n, &m);
    init();
    for(int i = 1; i <= n; i++)
    {
        scanf("%lf", &num[i]);
    }
    while(m--)
    {
        int u, v;
        double w;
        scanf("%d%d%lf", &u, &v, &w);
        read_graph(u, v, w);
    }
    double ans = BSearch();
    printf("%.2lf\n", ans);
    return 0;
}

转载于:https://www.cnblogs.com/g0feng/archive/2012/10/24/2737665.html

POJ 3621 Sightseeing Cows相关推荐

  1. poj 3621 Sightseeing Cows 01分数规划

    题目大意: http://poj.org/problem?id=3621 题解: 首先我们容易发现最优的路线一定只经过一个环. 所以我们可以把点权合并到边权上. 然后就转化为了一个01分数规划问题 求 ...

  2. POJ 3621 Sightseeing Cows [最优比率环]

    感觉去年9月的自己好$naive$ http://www.cnblogs.com/candy99/p/5868948.html 现在不也是嘛 裸题,具体看学习笔记 二分答案之后判负环就行了 $dfs$ ...

  3. POJ 3621 Sightseeing Cows(最优比率环+spfa的dfs判环优化)

    题目链接 题目大意:给你一个有向图,每个点都有一个权值,每条边都有一个长度,需要找到一个各点权值和/各边长度和 最大的环出来,输出这个比值. 分析:假设结点权值为wiw_iwi​,边的长度为lil_i ...

  4. 二分搜索 POJ 2456 Aggressive cows

    题目传送门 1 /* 2 二分搜索:搜索安排最近牛的距离不小于d 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #incl ...

  5. POJ 1637 Sightseeing tour(最大流)

    POJ 1637 Sightseeing tour 题目链接 题意:给一些有向边一些无向边,问能否把无向边定向之后确定一个欧拉回路 思路:这题的模型很的巧妙,转一个http://blog.csdn.n ...

  6. POJ 3621:Sightseeing Cows(最优比率环)

    http://poj.org/problem?id=3621 题意:有n个点m条有向边,每个点有一个点权val[i],边有边权w(i, j).找一个环使得Σ(val) / Σ(w)最大,并输出. 思路 ...

  7. Sightseeing Cows POJ - 3621

    题意: L个点,P边的点边带权的有向图,求一个环点权和与边权和比值的最大值. 题解: 01分数规划+判负环 详细看这里 还是套用01分数规划模型,点权为value[i],边权为cost[u],一个环为 ...

  8. POJ-3621 Sightseeing Cows 最优比率环、01分数规划

    题目链接:http://poj.org/problem?id=3621 这题是01分数规划问题,详细资料点这里.有了01分数规划的基础后,这个题目就很简单了.构建函数f(mid)=Σ(w[i]-mid ...

  9. poj 1637 Sightseeing tour 混合欧拉图判定

    POJ - 1637点我点我:-) Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000KB   64bit IO Format: %ll ...

最新文章

  1. 102TimeStatistic
  2. u-boot-1.1.6 设置新分区支持设备树
  3. 真正实时随机数的实现C++ _timeb _ftime(转)
  4. Android:浏览器跳转
  5. BZOJ4377: [POI2015]Kurs szybkiego czytania
  6. C#基础-获得当前程序的 空间名.类名.方法名
  7. 国内财务软件公司排名
  8. idea常用22种快捷键,脱离鼠标,便捷开发,赶紧收藏
  9. 2023北京邮电大学计算机考研信息汇总
  10. mac Error: EACCES: permission denied, mkdir './cache'
  11. Early stopping conditioned on metric `val_loss` which is not available. Available metrics are: loss,
  12. 酒水知识(六大基酒之威士忌_Whisky)
  13. 傻傻分不清:时间趋势项与时间虚拟变量
  14. 【unity shader/风格化水表面渲染/基础笔记】urp代码版05-焦散模拟
  15. ElasticSearch之Head插件集群健康问题
  16. Ubuntu使用Foxit Reader + GoldenDict实现PDF划译
  17. 基于javaWeb的毕业生论文管理系统
  18. 达梦数据库(DM8)基本使用方式
  19. 热转印打码机是如何实现打印的?
  20. 广义相对论基础【1】狭义相对论中的张量

热门文章

  1. python3猜数字小游戏代码示例
  2. Redis命令:DECR key减1操作
  3. linux下安装虚拟天文馆,如何在Ubuntu 20.04、18.04中安装Stellarium 0.20.0虚拟天文馆
  4. Linux下源码编译安装新版libxcb
  5. Ubuntu下安装谷歌浏览器(Google chrome)报错
  6. 什么是TCP三次握手?
  7. python中表头格式错误导入_python读csv文件时指定行为表头或无表头的方法
  8. 2.1.5 操作系统之线程概念与多线程模型
  9. stm32之电源管理(实现低功耗)
  10. 为什么要进行字节对齐?