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标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
随机推荐
- CMake入门-04-自定义编译选项
工作环境 系统:macOS Mojave 10.14.6 CMake: Version 3.15.0-rc4 Hello,World! - 自定义编译选项 CMake 允许为项目增加编译选项,从而可以 ...
- (十四)角色管理(Ztree插件的基本使用)
1. 建表 角色表 菜单表 角色-菜单(这个表中的role_id和menuu_id都不能被设置为主键,否则当插入一个新角色的时候,一个角色可能拥有多个菜单(role_id重复),一个菜单可能被多个角色 ...
- 利用贝叶斯算法实现手写体识别(Python)
在开始介绍之前,先了解贝叶斯理论知识 https://www.cnblogs.com/zhoulujun/p/8893393.html 简单来说就是:贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯 ...
- ubantu18.04 配置nginx与uwsgi(前后端分离)
ubantu18.04 配置nginx与uwsgi 一.首先先安装nginx静态服务 先更新 sudo apt-get update 1.安装gcc g++的依赖库 sudo apt-get in ...
- Java基础加强-jdk1.5的一些新特性
JDK 5.0 特性 1.静态导入(import static 语句导入一个类中的某个静态方法或所有静态方法) 如: import static java.lang.Math.*; 2.可变参数 1. ...
- 负载均衡之haproxy负载均衡算法及haproxy的工作模式
haproxy负载均衡的算法有如下7种: .roundrobin : 基于权重轮循. static-rr : 基于权重轮循.静态算法,运行时改变无法生效 source : 基于请求源IP的算法.对请求 ...
- curl: (7) couldn't connect to host 解决方法
使用curl命令访问网站时报错: [root@bqh-119 ~]# curl -I www.test.com curl: (7) couldn't connect to host [root@bqh ...
- MVC方式显示数据(手动添加数据)
Model添加类 Customers using System; using System.Collections.Generic; using System.Linq; using System.W ...
- python Beautiful Soup 采集it books pdf,免费下载
http://www.allitebooks.org/ 是我见过最良心的网站,所有书籍免费下载 周末无聊,尝试采集此站所有Pdf书籍. 采用技术 python3.5 Beautiful soup 分享 ...
- sql server 某一列求和
sql server 某一列求和 SELECT 患者来源,设备类型,检查部位,设备名称,convert(char(10),STUDY_DATE,121) as 日期, count(distinct 就 ...