LibreOJ #6000. 「网络流 24 题」搭配飞行员
二次联通门 : LibreOJ #6000. 「网络流 24 题」搭配飞行员
/*
LibreOJ #6000. 「网络流 24 题」搭配飞行员 二分图最大匹配
Dinic最大流 + 当前弧优化 */
#include <cstring>
#include <cstdio>
#include <queue> #define Max 10000
#define INF 1e5 int read (int &now)
{
now = ;
register char word = getchar ();
while (word < '' || word > '')
word = getchar ();
while (word >= '' && word <= '')
{
now = now * + word - '';
word = getchar ();
}
if (now >= )
return ;
} inline int min (int a, int b)
{
return a < b ? a : b;
} class Net_Flow_Type
{ private : int __to[Max << ], __next[Max << ]; int __flow[Max << ]; int edge_list[Max];
int Edge_Count; int deep[Max], __tech_[Max];
int T; int Answer; public : Net_Flow_Type ()
{
Edge_Count = ;
} inline void Insert_edge (int from, int to)
{
Edge_Count ++; __to[Edge_Count] = to;
__next[Edge_Count] = edge_list[from];
edge_list[from] = Edge_Count; Edge_Count ++; __to[Edge_Count] = from;
__next[Edge_Count] = edge_list[to];
edge_list[to] = Edge_Count; __flow[Edge_Count - ] = ;
__flow[Edge_Count] = ;
} bool Bfs (int Start, int End)
{
std :: queue <int> Queue; Queue.push (Start);
memset (deep, -, sizeof deep); int now;
for (deep[Start] = ; !Queue.empty (); Queue.pop ())
{
now = Queue.front (); for (int i = edge_list[now]; i; i = __next[i])
if (__flow[i] && deep[__to[i]] == -)
{
deep[__to[i]] = deep[now] + ;
if (__to[i] == End)
return true;
Queue.push (__to[i]);
}
} return deep[End] != -;
} int Flowing (int now, int flow)
{
if (now == T || flow <= )
return flow; int res = , pos = ;
for (int i = __tech_[now]; i; i = __next[i])
{
if (deep[__to[i]] != deep[now] + || __flow[i] <= )
continue;
res = Flowing (__to[i], min (flow, __flow[i])); if (res > )
{
flow -= res;
pos += res; __flow[i] -= res;
__flow[i ^ ] += res;
if (__flow[i])
__tech_[now] = i; if (flow == )
return pos;
}
}
return pos;
} int Dinic (int Start, int End)
{
for (T = End; Bfs (Start, End); )
{
memcpy (__tech_, edge_list, sizeof edge_list); Answer += Flowing (Start, INF);
} return Answer;
} }; int N, M;
Net_Flow_Type Make; int main (int argc, char *argv[])
{
read (N);
read (M); int S = N + , T = N + ; for (int i = ; i <= M; i ++)
Make.Insert_edge (S, i); for (int i = M + ; i <= N; i ++)
Make.Insert_edge (i, T); for (int x, y; scanf ("%d %d", &x, &y) == ; Make.Insert_edge (x, y)); printf ("%d", Make.Dinic (S, T)); return ;
}
LibreOJ #6000. 「网络流 24 题」搭配飞行员的更多相关文章
- LibreOJ #6000. 「网络流 24 题」搭配飞行员 最大匹配
#6000. 「网络流 24 题」搭配飞行员 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- 【刷题】LOJ 6000 「网络流 24 题」搭配飞行员
题目描述 飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭 ...
- Loj #6000.「 网络流 24 题 」搭配飞行员
解题思路 考虑如何建模. 既然是网络流,那么肯定要有源点和汇点.而这个题目并没有什么明显的源点和汇点. 想一想,如果一个飞机能够起飞的话,那么必定有一对可以配对的正副驾驶员.也就是说一条曾广路能够上必 ...
- LOJ6000 - 「网络流 24 题」搭配飞行员
原题链接 题意简述 求二分图的最大匹配. 题解 这里写的是匈牙利算法. 表示节点的当前匹配. 为真表示在这一轮匹配中,无法给节点一个新的匹配.所以如果为真就不用再dfs它了,直接continue就好. ...
- [日常摸鱼]loj6000「网络流 24 题」搭配飞行员
题面 应该是二分图匹配,不过我写的是网络最大流. dinic求二分图最大匹配:加个源点和汇点,源点连向二分图的一边所有点,二分图的另一边所有点连向汇点,很明显这样得到的最大流就是这个二分图的最大匹配. ...
- LibreOJ #6002. 「网络流 24 题」最小路径覆盖
#6002. 「网络流 24 题」最小路径覆盖 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测 ...
- LibreOJ #6014. 「网络流 24 题」最长 k 可重区间集
#6014. 「网络流 24 题」最长 k 可重区间集 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 ...
- LibreOJ #6013. 「网络流 24 题」负载平衡 最小费用最大流 供应平衡问题
#6013. 「网络流 24 题」负载平衡 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- LIbreOJ #6011. 「网络流 24 题」运输问题 最小费用最大流
#6011. 「网络流 24 题」运输问题 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
随机推荐
- MogileFS安装
MogileFS是一款开源的.高性能的.分布式的文件系统,用于组建分布式文件集群.用来存取海量文件,而不用关心具体的文件存放位置.存储容量大小,以及文件损坏和丢失等问题 MogileFS有三大部分:存 ...
- 最全APP安装/卸载/更新测试点
1.安装查看在安装过程中存在的提示信息是否明确,意思是否明确在安装过程中,点击取消按钮,能否正常退出安装程序,软件是否可用.安装时是否识别有SD卡,并默认安装到sd卡中安装过程中,接听电话或者短信,安 ...
- LOJ6583 ICPC World Finals 2019何以伊名始(广义后缀自动机)
对trie建SAM,询问串倒过来跑到的节点的|right|即为答案. #include<bits/stdc++.h> using namespace std; #define ll lon ...
- sql server 学习笔记 (nested transaction 嵌套事务)
什么时候会用到嵌套事务 ? 为了代码复用,我们会写许多的储蓄过程,而中间如果需要使用到 transaction 难免就会发生嵌套了. sql server 并不直接支持嵌套事务. 但它可以用一些招式来 ...
- delete删除数据造成归档日志增加,操作系统空间不足导致数据库hang住
业务需求,对日志表历史数据进行清理.历史表均很大,使用delete 操作删除90天前的数据. 第一部分:快速删除数据 SQL> alter table CC.F_LOG parallel ; S ...
- 怎样理解没有this的构造函数
如果一个构造函数内部没有this, 那可以说这个压根不是构造函数, 因为他并不能返回一个实例对象; function Person(name) { var name = name; }; var li ...
- [JZOJ5279]香港记者题解--最短路图
[JZOJ5279]香港记者题解--最短路图 题目链接 过 于 暴 力 分析 有一个naiive的想法就是从1到n跑最短路,中途建图,然后在图上按字典序最小走一遍,然而·这是不行的,你这样跳不一定能跳 ...
- 2.Buffer 缓冲区
/*缓冲区(Buffer)*/ Buffer 就像一个数组,可以保存多个相同类型的数据.根据数据类型不同(boolean 除外),有以下Buffer常用子类: /*ByteBuffer*/(常用) . ...
- Java基础加强-类加载器
/*类加载器*/ 把.class文件从硬盘上加载出来,将类的字节码(二进制)加载到内存中 /*类加载器及其委托机制*/ Java虚拟机中可以安装多个类加载器(可以自己编写),系统默认三个主要类加载器, ...
- js 实现复制功能的四种方式的优劣对比
今日网上浏览别人项目,看到有人用了document.execCommand这个属性,于是想起之前我选用Clipboard.js 来实现.对于这种不常用的属性还是不太放心,于是随手查了下关于复制的资料, ...