题目


分析

考虑答案一定最大不超过\(n\),那么可以建分层图,

若当前最大流等于\(n\),直接输出枚举的天数

\((x,x')\)容量为\(inf\),\((x,y')\)容量为一个航班最多的票数

然后\(n'\)与汇点连一条边,容量为总人数(\(x'\)表示当前层,\(x\)表示上一层)


代码

#include <cstdio>
#include <cctype>
#include <queue>
#define rr register
using namespace std;
const int N=2511,inf=0x3f3f3f3f; struct node{int y,w,next;}e[N<<8];
int as[N<<1],rk[101][51],n,k=1,Tot,m,X[N],Y[N],Z[N],dis[N<<1],total,s,t,now,ans;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline void add(int x,int y,int w){
e[++k]=(node){y,w,as[x]}; as[x]=k;
e[++k]=(node){x,0,as[y]}; as[y]=k;
}
inline bool bfs(int s){
for (rr int i=1;i<=Tot;++i) dis[i]=0;
rr queue<int>q; q.push(s); dis[s]=1;
while (q.size()){
rr int x=q.front(); q.pop();
for (rr int i=as[x];i;i=e[i].next)
if (e[i].w>0&&!dis[e[i].y]){
dis[e[i].y]=dis[x]+1;
if (e[i].y==t) return 1;
q.push(e[i].y);
}
}
return 0;
}
inline signed dfs(int x,int now){
if (x==t||!now) return now;
rr int rest=0,f;
for (rr int i=as[x];i;i=e[i].next)
if (e[i].w>0&&dis[e[i].y]==dis[x]+1){
rest+=(f=dfs(e[i].y,min(now-rest,e[i].w)));
e[i].w-=f; e[i^1].w+=f;
if (now==rest) return rest;
}
if (!rest) dis[x]=0;
return rest;
}
signed main(){
n=iut(),m=iut(),total=iut(),s=1,Tot=t=2;
for (rr int i=1;i<=n;++i) rk[0][i]=++Tot;
add(s,rk[0][1],total),add(rk[0][n],t,total);
for (rr int i=1;i<=m;++i) X[i]=iut(),Y[i]=iut(),Z[i]=iut();
for (ans=1;;++ans){
for (rr int i=1;i<=n;++i) add(rk[ans-1][i],rk[ans][i]=++Tot,inf);
for (rr int i=1;i<=m;++i) add(rk[ans-1][X[i]],rk[ans][Y[i]],Z[i]);
add(rk[ans][n],t,total);
while (bfs(s)) now+=dfs(s,inf);
if (now==total) break;
}
return !printf("%d",ans);
}

#网络流,分层图#洛谷 4400 [JSOI2008] Blue Mary的旅行的更多相关文章

  1. 洛谷P4254 [JSOI2008]Blue Mary开公司(李超线段树)

    题面 传送门 题解 李超线段树板子 具体可以看这里 //minamoto #include<bits/stdc++.h> #define R register #define fp(i,a ...

  2. 【BZOJ1570】[JSOI2008]Blue Mary的旅行 动态加边网络流

    [BZOJ1570][JSOI2008]Blue Mary的旅行 Description 在一段时间之后,网络公司终于有了一定的知名度,也开始收到一些订单,其中最大的一宗来自B市.Blue Mary决 ...

  3. bzoj1570: [JSOI2008]Blue Mary的旅行(二分+网络流)

    1570: [JSOI2008]Blue Mary的旅行 题目:传送门 题解: get到拆点新姿势,还是做题太少了...ORZ 因为每天就只能有一个航班,那就不能直接连了,所以要拆点(然后就被卡住了) ...

  4. [USACO08JAN]电话线Telephone Lines(分层图)/洛谷P1948

    这道题其实是分层图,但和裸的分层图不太一样.因为它只要求路径总权值为路径上最大一条路径的权值,但仔细考虑,这同时也满足一个贪心的性质,那就是当你每次用路径总权值小的方案来更新,那么可以保证新的路径权值 ...

  5. BZOJ1570 [JSOI2008]Blue Mary的旅行

    建分层图,每一层表示一天的情况 从S向第0层的1号点连边,每层的n向T连INF的边 枚举天数,每多一天就多建一层然后跑最大流,如果当前流量大于人数则输出答案 由于路径长度不会超过n,因此tot个人走这 ...

  6. bzoj 1570: [JSOI2008]Blue Mary的旅行

    Description 在一段时间之后,网络公司终于有了一定的知名度,也开始收到一些订单,其中最大的一宗来自B市.Blue Mary决定亲自去签下这份订单.为了节省旅行经费,他的某个金融顾问建议只购买 ...

  7. [JSOI2008]Blue Mary的旅行

    嘟嘟嘟 看\(n\)那么小,就知道是网络流.然后二分,按时间拆点. 刚开始我看成所有航班一天只能起飞一次,纠结了好一会儿.但实际上是每一个航班单独考虑,互不影响. 建图很显然,拆完点后每一个点的第\( ...

  8. 【bzoj1507】 JSOI2008—Blue Mary的旅行

    http://www.lydsy.com/JudgeOnline/problem.php?id=1570 (题目链接) 题意 给出$m$个航班,每天只能做一次飞机,有$T$人从起点到终点,问最晚到达的 ...

  9. BZOJ 1570: [JSOI2008]Blue Mary的旅行( 二分答案 + 最大流 )

    二分答案, 然后对于答案m, 把地点分成m层, 对于边(u, v), 第x层的u -> 第x+1层的v 连边. 然后第x层的u -> 第x+1层的u连边(+oo), S->第一层的1 ...

  10. 洛谷 P1198 [JSOI2008]最大数

    洛谷 P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. ...

随机推荐

  1. 阿里云 SMS 短信 Java SDK 封装

    Github & Issues: https://github.com/cn-src/aliyun-sms 官方文档:https://help.aliyun.com/document_deta ...

  2. 亲测CentOS 8.2更换yum源报错Errors during downloading metadata for repository 'epel': - Status code解决办法

    重点 提一件拉胯的事:别去参考阿里和华为云官方镜像上面的解决办法,本人试了几遍,没luan用.拉胯!!!!!!!! 报错具体信息 Errors during downloading metadata ...

  3. 使用paramiko模块远程连接遇到paramiko.ssh_exception.NoValidConnectionsError的解决办法

    连接时报错paramiko.ssh_exception.NoValidConnectionsError, 解决办法 首先在ubuntu终端上输入:cat /etc/ssh/ssh_config,查看端 ...

  4. 【LeetCode回溯算法#04】组合总和I与组合总和II(单层处理位置去重)

    组合总和 力扣题目链接(opens new window) 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target ...

  5. github.com/json-iterator/go 详细教程

    最近接触到了 github.com/json-iterator/go , 是由滴滴开源的第三方json编码库,它同时提供Go和Java两个版本. 文中大量内容来自 github 上的 wiki 文档, ...

  6. 第一百一十六篇: JavaScript理解对象

    好家伙,本篇为<JS高级程序设计>第八章"对象.类与面向对象编程"学习笔记   1.关于对象 ECMA-262将对象定义为一组属性的无序集合.严格来说,这意味着对象就是 ...

  7. 【Azure 应用服务】在创建App Service时,遇见“No available instances to satisfy this request. App Service is attempting to increase capacity.”错误

    问题描述 在创建新的App Service,遇见了资源不满足当前需求的提示.详细消息为: "Code": "Conflict","Message&qu ...

  8. 【Azure 应用服务】如何从App Service for Linux 的环境中下载Container中非Home目录下的文件呢?

    问题描述 在App Service for Linux的环境中,我们能通过SSH进入到Container的环境中,并且可以通过在kudu站点的URL后面添加 /newui 打开一个适用于Linux环境 ...

  9. linux基本知识汇总1(基础命令) 20000字汇总

    $$$$ 命令选项查看方式1.内建命令(help)格式: help + 内建命令#### help 命令 // 命令使用说明 2.外部命令(–help)一般是 Linux 命令自带的帮助信息,并不是所 ...

  10. RocketMQ(2) 消息的生产和存储

    ## 一 : 消息的生产 1. 消息的生产过程 Producer在发送消息时可以将消息写入到指定topic的某Broker中的某Queue中,其经历了如下过程: Producer发送消息之前,会先向N ...