题目描述

大战将至, 美国决定实行计划经济。美国西部总共有 N 个城市,编号
为 0 ∼ N − 1,以及 M 条道路,道路是单向的。其中城市 0 是一个大城
市,里面住着 K 个人,而城市 N − 1 是一个农业城市。现在所有城市 0 的
居民都需要到城市 N − 1 去领取食物。由于担心体力不支,所以居民都会
采取开车的形式出行。但道路不是无限宽的,对于一条道路,会有 ci 的限
制,表示在同一天内,最多只能有 ci 辆车同时在这条道路上行驶。一条道
路的长度为 1,每辆车的行驶速度也可以假定为 1 每天。城市 N − 1 会在
每个居民都到达后马上开始发放食物。现在 Reddington 想知道,假如在最
优安排下,居民最早能在多少天后领到食物。假如没有居民那就不需要发
放食物,默认为第 0 天。
题解
ORZ zyz
首先答案具有单调性,可以二分。
然后贪心一波,我们肯定要捡着最短路去走,然后我们增广出了一条路,因为时间时固定的,所以我们能通过的人数已经确定了。
就是(T-dis+1)*min(l)前面的是第一波人到终点到结束的时间, minl表示路径权值的最小值。
然后我们就一直重复这个过程,发现这个过程和EK费用流完全一样。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define inf 1e18
#define N 1009
#define M 20002
using namespace std;
typedef long long ll;
queue<int>q;
int dis[N],head[N],tot=,pre[N],n,m,k;
ll fl[N],num;
bool vis[N];
inline int rd(){
int x=;char c=getchar();bool f=;
while(!isdigit(c)){if(c=='-')f=;c=getchar();}
while(isdigit(c)){x=(x<<)+(x<<)+(c^);c=getchar();}
return f?-x:x;
}
struct edge{int n,to,l,f;}e[M];
inline void add(int u,int v,int l,int f){
e[++tot].n=head[u];e[tot].to=v;head[u]=tot;e[tot].l=l;e[tot].f=f;
e[++tot].n=head[v];e[tot].to=u;head[v]=tot;e[tot].l=;e[tot].f=-f;
}
inline bool spfa(int s,int t){
memset(dis,0x3f,sizeof(dis));
dis[s]=;q.push(s);fl[s]=inf;
while(!q.empty()){
int u=q.front();q.pop();vis[u]=;
for(int i=head[u];i;i=e[i].n){
int v=e[i].to;
if(e[i].l&&dis[v]>dis[u]+e[i].f){
dis[v]=dis[u]+e[i].f;pre[v]=i;fl[v]=min(fl[u],1ll*e[i].l);
if(!vis[v]){vis[v]=;q.push(v);}
}
}
}
return dis[t]!=0x3f3f3f3f;
}
struct node{
int u,v,w;
}a[M];
inline void calc(int s,int t,ll mid){
int x=t;
while(x!=s){
int i=pre[x];
e[i].l-=fl[t];e[i^].l+=fl[t];x=e[i^].to;
}
num+=max(0ll,1ll*(mid-dis[t]+)*fl[t]);
}
inline bool check(ll mid){
memset(head,,sizeof(head));tot=;num=;
for(int i=;i<=m;++i)add(a[i].u,a[i].v,a[i].w,);
while(spfa(,n-))calc(,n-,mid);
return num>=k;
}
int main(){
while(scanf("%d%d%d",&n,&m,&k)!=EOF){
for(int i=;i<=m;++i){a[i].u=rd();a[i].v=rd();a[i].w=rd();}
ll l=,r=1e12,ans=-;
while(l<=r){
ll mid=(l+r)>>;
if(check(mid)){
ans=mid;r=mid-;
}else l=mid+;
}
if(~ans)printf("%d\n",ans);else printf("No solution\n");
}
return ;
}

BZOJ4669抢夺(费用流+二分答案)的更多相关文章

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

    题目传送门 传送门 题目大意 给定一个费用流,每条边有一个初始流量$c_i$和单位流量费用$d_i$,增加一条边的1单位的流量需要花费$b_i$的代价而减少一条边的1单位的流量需要花费$a_i$的代价 ...

  2. luogu3305/bzoj3130 费用流 (二分答案+dinic)

    Bob肯定想挑一个流量最大的边,然后把所有的费用都加给它呗 那Alice就让流量最大的边尽量小呗 那就二分一下答案再dinic呗 #include<bits/stdc++.h> #defi ...

  3. BZOJ2406矩阵——有上下界的可行流+二分答案

    题目描述 输入 第一行两个数n.m,表示矩阵的大小. 接下来n行,每行m列,描述矩阵A. 最后一行两个数L,R. 输出 第一行,输出最小的答案: 样例输入 2 2 0 1 2 1 0 1 样例输出 1 ...

  4. BZOJ 1305 dance跳舞(最大流+二分答案)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1305 解题思路:转自:https://blog.csdn.net/u012288458/ ...

  5. [Poi2010]Bridges 最大流+二分答案 判定混合图欧拉回路

    https://darkbzoj.cf/problem/2095 bzoj 相同的题挂了,这个oj可以写. 题目就是要我们找一条欧拉回路(每个桥经过一次就好,不管方向),使得这条回路上权值最大的尽量小 ...

  6. 【bzoj3130】[Sdoi2013]费用流 二分+网络流最大流

    题目描述 Alice和Bob做游戏,给出一张有向图表示运输网络,Alice先给Bob一种最大流方案,然后Bob在所有边上分配总和等于P的非负费用.Alice希望总费用尽量小,而Bob希望总费用尽量大. ...

  7. Luogu P3305 [SDOI2013]费用流 二分 网络流

    题目链接 \(Click\) \(Here\) 非常有趣的一个题目. 关键结论:所有的单位费用应该被分配在流量最大的边上. 即:在保证最大流的前提下,使最大流量最小.这里我们采用二分的方法,每次判断让 ...

  8. BZOJ3130: [Sdoi2013]费用流(二分,最大流)

    Description Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识.    最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量.一个合法的网络 ...

  9. HDU-3081-Marriage Match 2(最大流, 二分答案, 并查集)

    链接: https://vjudge.net/problem/HDU-3081 题意: Presumably, you all have known the question of stable ma ...

随机推荐

  1. Mission Impossible 6

    题目:Mission Impossible 6 题目链接:http://hihocoder.com/problemset/problem/1228 题目大意: 大概就是让我们写一个代码模拟文本编辑器的 ...

  2. 关于Vue-cli 组件引入CSS样式文件

    在 Vue-cli 组件 .vue 文件中引入 css 样式表出错   由于使用Vue-cli后, 引入css 样式表 不需要 多余../../ 之类路径  现在写法也发生了改变 <style ...

  3. springboot项目小总结

    使用模板引擎 thyemlef 可以直接将 html文件进行导入 loginhtml文件   html中常用的表达式 <link href="asserts/css/signin.cs ...

  4. 从Oracle数据库中查询前几个月数据时需要注意的一些问题

    在最近的一个项目中,有一个需求就是要查询数据库中前几个月的历史数据,但是由于自己考虑不全面造成了程序的bug,现在将这一块好好作一个总结,希望以后不再犯这种很低级的错误,首先贴出查询中用到的一个子函数 ...

  5. 996.ICU

    996.ICU https://github.com/996icu/996.ICU https://www.zhihu.com/question/317722302 LICENSE https://g ...

  6. captive portal

    刷好lineageos后默认浏览器无法上网,实际上并不是没有连上网,而是captive portal即网关设置错误,设置一下即可上网. adb shell "settings put glo ...

  7. Tuple Class

    Inheritance Hierarchy   System.Object  System.Tuple Methods   Name Description Create<T1>(T1) ...

  8. CF821C Okabe and Boxes

    题目链接 题目大意 模拟栈的操作,要求从1~n依次弹出,若不符合可以排序,且不会有不合法情况,求最少排序次数. 思路 由于一定没有不合法情况,所以每次不符合顺序时可以直接清空,遇到栈为空时仍然要求弹出 ...

  9. LAMP架构部署和动态网站环境的配置

    实验环境: 操作系统:centos 7.5 服务器IP:192.168.10.5 运行用户:root 连接工具:xshell工具 web环境:Linux+apache+php+mariadb(LAMP ...

  10. centos6 nginx 安装【转】

    原文 https://www.cnblogs.com/yaoximing/p/6068622.html 1.下载nginx 方法一 wget http://nginx.org/download/ngi ...