题目戳这里

一句话题意

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. servlet与线程与jdbc connection的关系

    servlet与线程与jdbc connection的关系 都是一一绑定的关系, servlet接受那么多此请求. 一个请求,对应一个线程,对应一个DB POOL的connection. 因为conn ...

  2. Resolving the Provisioning Profile Invalid Status

    Q:  What causes the provisioning profile "Invalid" status? How do I resolve it, and how do ...

  3. 压缩软件Snappy的安装

    1.下载源码,通过编译源码安装  tar -zxvf  /home/zfll/soft/snappy-1.1.2.tar.gz cd snappy-1.1.2 ./configure make sud ...

  4. js aop 拦载实现

    var run = function(){ //is run } var aopBefore = function(){ //aopBefore } var tmpFn=run; run = func ...

  5. C#网络编程:Socket编程

    套接字简介:套接字最早是Unix的,window是借鉴过来的.TCP/IP协议族提供三种套接字:流式.数据报式.原始套接字.其中原始套接字允许对底层协议直接访问,一般用于检验新协议或者新设备问题,很少 ...

  6. Performing User-Managed Database-18.7、Performing Complete User-Managed Media Recovery

    18.7.Performing Complete User-Managed Media Recovery 完毕一致性备份,把数据库恢复到当前的scn是最好的结果.能够恢复整个数据库.恢复单个表空间.或 ...

  7. json lib 2.4及其依赖包下载

    下载文件地址:https://files.cnblogs.com/files/xiandedanteng/json-lib-2.4%26dependencies_jars.rar 它包括 common ...

  8. 性能指标 - OEE

    work center 是指 执行制造作业的资源, 可以是 一个人, 一组人, 一台自动机器, 一组自动机器, 一个半自动机器, 一组半自动机器, 或者是 一个区域组成的生产资源 基本参数 Time ...

  9. UNP学习笔记(第十六章 非阻塞I/O)

    套接字的默认状态时阻塞的 可能阻塞的套接字调用可分为以下4类: 1.输入操作,包括read.readv.recv.recvfrom和recvmsg. 2.输入操作,包括write.writev.sen ...

  10. 【Excle数据透视表】如何重命名数据透视表

    如下图,是新生成的一个数据透视简表,现在需要将其数据透视表的名称修改为:汇总数据 解决办法 修改后的效果如下: