BZOJ3597: [Scoi2014]方伯伯运椰子



输入格式:

第1 行包含2 个整数n,m
接下来m 行代表m 条边,表示这个交通网络。
每行6 个整数,表示ui,vi,ai,bi,ci,di.
接下来1 行包含1 条边,表示连接起点的边

输出格式:

一个浮点数,保留2 位小数,表示要求的答案,数据保证答案大于0

样例输入:

6 7
1 2 0 0 1 1000
2 4 0 0 1 1000
4 6 0 0 1 1000
1 3 0 0 0 0
3 5 0 0 0 0
5 6 0 0 0 0
6 8 0 0 1 0
7 1 0 0 1 0

样例输出:

500.00

数据范围:

时间限制:

3s

空间限制:

64M

具体思路:要求的答案好奇怪啊,好像很像分数规划啊

那么就用分数规划做吧

根据套路,我们要二分一下答案

然后怎么办办勒

发现由于原图是满流的,所以最优方案一定是从一个点到另一个点的一条路径+1流量,另一条-1流量

那么对于流量>0的边,可以加流量,那就连一条长为单位流量+加流量需要的代价,也可以减流量那就连一条长为-单位流量+减流量需要的代价的反向边

对于流量为0的边,就只可以加流量了

然后把每个边的长+mid(二分的答案)然后SPFA判一下有无负环就好了

AC代码:

#include<bits/stdc++.h>
#define INF 100000000
const double eps=1e-6;
using namespace std;
int x,y,n,m,i,j,top=1,A,B,C,D,first[200000],next[200000],last[200000],to[200000];
int bo[200000];
double dis[200000],len[200000],ans;
void add(int x,int y,int l)
{
    top++,to[top]=y,len[top]=(double)l;
    if(first[x]==0)first[x]=top;else next[last[x]]=top;
    last[x]=top;
}
void SPFA(int x,double mid)
{
    if(ans)return;
    bo[x]=true;
    for(int i=first[x];i;i=next[i])
    if(dis[x]+len[i]+mid<dis[to[i]])
    {
        if(bo[to[i]]||ans)
        {
            ans=1;
            break;
        }
        dis[to[i]]=dis[x]+len[i]+mid;
        SPFA(to[i],mid);
    }
    if(ans)return;
    bo[x]=false;
}
bool ok(double mid)
{
    for(int i=1;i<=n+2;i++)dis[i]=0.0,bo[i]=0;
    for(int i=1;i<=n+2;i++)
    {
        ans=0;SPFA(i,mid);
        if(ans)return true;
    }
    return false;
}
int main()
{
    scanf("%d%d",&n,&m);
    for(i=1;i<=m+1;i++)
    {
        scanf("%d%d%d%d%d%d",&x,&y,&A,&B,&C,&D);
        if(C)add(x,y,D+B),add(y,x,A-D);else add(x,y,B+D);
    }

    double l=0,r=1000.0,mid;
    while(r-l>eps)
    {
        mid=(l+r)/2.0;
        if(ok(mid))l=mid;else r=mid;
    }
    printf("%.2lf",mid);
}

原文地址:https://www.cnblogs.com/Orange-User/p/8531223.html

时间: 2024-10-10 19:37:01

BZOJ3597: [Scoi2014]方伯伯运椰子的相关文章

BZOJ3597 [Scoi2014]方伯伯运椰子 【二分 + 判负环】

题目链接 BZOJ3597 题解 orz一眼过去一点思路都没有 既然是流量网络,就要借鉴网络流的思想了 我们先处理一下那个比值,显然是一个分数规划,我们二分一个\(\lambda = \frac{X - Y}{k}\) 如果\(\lambda\)成立,则 \[\lambda \le \frac{X - Y}{k}\] 即 \[\lambda k + (Y - X) \le 0\] 所以我们只需要判断是否存在一种方案使得这个式子成立 依照网络流的思想,撤回流量就往反向边走,扩展流量往正向边 对于边

bzoj 3597 [Scoi2014] 方伯伯运椰子 - 费用流 - 二分答案

题目传送门 传送门 题目大意 给定一个费用流,每条边有一个初始流量$c_i$和单位流量费用$d_i$,增加一条边的1单位的流量需要花费$b_i$的代价而减少一条边的1单位的流量需要花费$a_i$的代价.要求最小化总费用减少量和调整次数的比值(至少调整一次). 根据基本套路,二分答案,移项,可以得到每条边的贡献. 设第$i$条边的流量变化量为$m_i$,每次变化花费的平均费用为$w_i$.那么有 $\sum c_id_i - \sum (c_i + m_i)d_i + |m_i|(w_i + mi

BZOJ 3597 SCOI2014 方伯伯送椰子 网络流分析+SPFA

原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3597 Description 四川的方伯伯为了致富,决定引进海南的椰子树.方伯伯的椰子园十分现代化,椰子园中有一套独特的交通系统. 现在用点来表示交通节点,边来表示道路.这样,方伯伯的椰子园就可以看作一个有 n + 2 个交通节点,m条边的有向无环图.n +1 号点为入口,n +2 号点为出口.每条道路都有 6 个参数,ui,vi,ai,bi,ci,di,分别表示,该道路从 ui 号点通

bzoj3594 [Scoi2014]方伯伯的玉米田

3594: [Scoi2014]方伯伯的玉米田Time Limit: 60 Sec Memory Limit: 128 MBSubmit: 1437 Solved: 647[Submit][Status][Discuss]Description方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐.方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩下的玉米的高度构成一个单调不下降序列.方伯伯可以选择一个区间,把

bzoj 3594: [Scoi2014]方伯伯的玉米田 dp树状数组优化

3594: [Scoi2014]方伯伯的玉米田 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 314  Solved: 132[Submit][Status] Description 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐.方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩下的玉米的高度构成一个单调不下降序列.方伯伯可以选择一个区间,把这个区间的

BZOJ 3595: [Scoi2014]方伯伯的Oj SBT+可持久化Treap

3595: [Scoi2014]方伯伯的OjTime Limit: 6 Sec  Memory Limit: 256 MBSubmit: 102  Solved: 54[Submit][Status] Description 方伯伯正在做他的Oj.现在他在处理Oj上的用户排名问题. Oj上注册了n个用户,编号为1-",一开始他们按照编号排名.方伯伯会按照心情对这些用户做以下四种操作,修改用户的排名和编号: 1.操作格式为1 x y,意味着将编号为z的用户编号改为V,而排名不变,执行完该操作后需要

3594: [Scoi2014]方伯伯的玉米田

3594: [Scoi2014]方伯伯的玉米田 Description 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐.方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩下的玉米的高度构成一个单调不下降序列.方伯伯可以选择一个区间,把这个区间的玉米全部拔高1单位高度,他可以进行最多K次这样的操作.拔玉米则可以随意选择一个集合的玉米拔掉.问能最多剩多少株玉米,来构成一排美丽的玉米. Input 第1行包含

BZOJ 3594[Scoi2014]方伯伯的玉米田

题面: 3594: [Scoi2014]方伯伯的玉米田 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 1403  Solved: 630[Submit][Status][Discuss] Description 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐.方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩下的玉米的高度构成一个单调不下降序列.方伯伯可

[Scoi2014]方伯伯的玉米田

[Scoi2014]方伯伯的玉米田 Time Limit: 60 Sec  Memory Limit: 128 MBhttp://www.lydsy.com/JudgeOnline/problem.php?id=3594 Description 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐.方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩下的玉米的高度构成一个单调不下降序列.方伯伯可以选择一个区间,