题目戳这里

一句话题意

L个点,P条有向边,求图中最大比率环(权值(Fun)与长度(Tim)的比率最大的环)。

Solution

巨说这是0/1分数规划。

话说 0/1分数规划 是真的难,但貌似有一些规律,总是离不开一个二分和带mid的不等式。

记环S=({vi},{ei}), 其中{vi}为环上结点的集合,{ei}为环上的边的集合

我们先分析一波公式:不过是要求\(\sum_{i=1}^{t}Fun[v[i]]/\sum_{i=1}^{t}Tim[e[i]]>mid\) 最小

不难想到要二分一个mid然后判定图上是否存在一个环S

使得

\[\sum_{i=1}^{t}Fun[e[i]]+\sum_{i=1}^{t}Tim[v[i]]>0
\]

也相当于判断

\[\sum_{i=1}^{t}{Fun[vi​]−mid∗Tim[ei​]}>0
\]

因为每个点有许多条出边,这样很难处理,但是每条边都只有一个连向的点,所以我们把左右两边都乘以-1,将对点的处理转变成对边的处理:

\[\sum_{i=1}^{t}mid∗Tim[ei​]-Fun[v[i]]<0
\]

那么思路便很明显了,对于每一个二分出来的mid,都跑一遍SPFA,而边权就是 mid*长度-连向点的点权,若有负环则L=mid,否则R=mid, 直到达到精度要求。

Coding

#include<bits/stdc++.h>
using namespace std;
const int N = 1e4;
int vis[N],num[N],cnt,head[N],n,m;
double f[N],dis[N];
struct road
{
int to,next;
double t;
}e[N*10];
void add(int x,int y,double w)
{
cnt++;
e[cnt].to=y;
e[cnt].next=head[x];
e[cnt].t=w;
head[x]=cnt;
}
bool check(double mid)
{
queue<int> q;
for(int i=1;i<=n;++i)
{
q.push(i);
dis[i]=0; vis[i]=num[i]=1;
}
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=0;
for(int i=head[u];i;i=e[i].next)
{
int v=e[i].to;
if(dis[v]>dis[u]+mid*e[i].t-f[u])
{
dis[v]=dis[u]+mid*e[i].t-f[u];
if(!vis[v])
{
q.push(v);
vis[v]=1;
num[v]++;
if(num[v]>=n) return 1;
}
}
}
}
return 0;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>f[i];
for(int i=1;i<=m;i++)
{
int x,y;
double w;
cin>>x>>y>>w;
add(x,y,w);
}
double mid,l=0,r=1000;
while(r-l>0.0001)
{
mid=(l+r)/2;
//printf("%lf %lf\n",l,r);
if(check(mid)) l=mid;
else r=mid;
}
printf("%.2lf",l);
return 0;
}

洛谷 2868 [USACO07DEC]观光奶牛Sightseeing Cows的更多相关文章

  1. POJ3621或洛谷2868 [USACO07DEC]观光奶牛Sightseeing Cows

    一道\(0/1\)分数规划+负环 POJ原题链接 洛谷原题链接 显然是\(0/1\)分数规划问题. 二分答案,设二分值为\(mid\). 然后对二分进行判断,我们建立新图,没有点权,设当前有向边为\( ...

  2. 洛谷P2868 [USACO07DEC]观光奶牛Sightseeing Cows

    P2868 [USACO07DEC]观光奶牛Sightseeing Cows 题目描述 Farmer John has decided to reward his cows for their har ...

  3. 洛谷P2868 [USACO07DEC]观光奶牛 Sightseeing Cows

    题目描述 Farmer John has decided to reward his cows for their hard work by taking them on a tour of the ...

  4. 洛谷 P2868 [USACO07DEC]观光奶牛Sightseeing Cows

    题目描述 Farmer John has decided to reward his cows for their hard work by taking them on a tour of the ...

  5. 洛谷P2868 [USACO07DEC]观光奶牛Sightseeing Cows(01分数规划)

    题意 题目链接 Sol 复习一下01分数规划 设\(a_i\)为点权,\(b_i\)为边权,我们要最大化\(\sum \frac{a_i}{b_i}\).可以二分一个答案\(k\),我们需要检查\(\ ...

  6. 洛谷 P2868 [USACO07DEC]观光奶牛Sightseeing Cows 题解

    题面 这道题是一道标准的01分数规划: 但是有一些细节可以优化: 不难想到要二分一个mid然后判定图上是否存在一个环S,该环是否满足∑i=1t(Fun[vi]−mid∗Tim[ei])>0 但是 ...

  7. Luogu 2868 [USACO07DEC]观光奶牛Sightseeing Cows

    01分数规划复习. 这东西有一个名字叫做最优比率环. 首先这个答案具有单调性,我们考虑如何检验. 设$\frac{\sum_{i = 1}^{n}F_i}{\sum_{i = 1}^{n}T_i} = ...

  8. P2868 [USACO07DEC]观光奶牛Sightseeing Cows

    P2868 [USACO07DEC]观光奶牛Sightseeing Cows [](https://www.cnblogs.com/images/cnblogs_com/Tony-Double-Sky ...

  9. [USACO07DEC]观光奶牛Sightseeing Cows 二分答案+判断负环

    题目描述 Farmer John has decided to reward his cows for their hard work by taking them on a tour of the ...

随机推荐

  1. Graphs (Cakewalk) 1 B - medium

    Discription Bear Limak examines a social network. Its main functionality is that two members can bec ...

  2. 聊聊、Zookeeper API

    今天我们来说说 Zookeeper 客户端启动,整个文章分三个部分:第一部分是 Zookeeper 原生 API 客户端,第二部分是开源客户端 ZkClient,第三部分是开源客户端 Curator. ...

  3. 【spring boot】在自定义拦截器中从request中获取json字符串

    又这样的需求,需要在自定义的拦截器中获取request中的数据,想获取到的是JSON字符串 那需要在拦截器中写这样一个方法 public static String getOpenApiRequest ...

  4. xamarin.ios 本地通知推送

    由于ios10版本以后UILocalNotification被标为弃用了,所以要添加新的本地通知推送功能,下面提供一些代码参考. 一.先在AppDelegate.cs上注册本地通知推送功能. publ ...

  5. struts2中迭代的使用方法

    struts2  Html代码   <s:iterator value="resultList" id="user" status="st&qu ...

  6. 【前端阅读】——《JavaScript入门经典》摘记之JavaScript与XML

    前言:这本书除了基础的JavaScript理论体系之外,有一个特别的章节,就是讲解——JavaScript与XML的关系,从中,我更进一步的了解了XML的基础.创建.显示以及使用JavaScript如 ...

  7. 转: 微信开源C/C++ RPC框架PhxRPC

    转自: http://mp.weixin.qq.com/s?__biz=MzI4NDMyNTU2Mw==&mid=2247483734&idx=1&sn=da364812eca ...

  8. Android的Framework分析---5 ActivityManager分析

    Android系统开发交流群:484966421 OSHome. 微信公众号:oshome2015 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font ...

  9. MySQL 函数笔记

    统计相关函数 COUNT和SUM函数使用小技巧 参考自: MySQL - Conditional COUNT with GROUP BY 在一个 SQL 中统计多个指标的个数: SELECT COUN ...

  10. Struts2学习二----------访问Servlet API

    © 版权声明:本文为博主原创文章,转载请注明出处 Struts2提供了三种方式去访问Servlet API -ActionContext -实现*Aware接口 -ServletActionConte ...