[日常摸鱼]loj6000「网络流 24 题」搭配飞行员
应该是二分图匹配,不过我写的是网络最大流。
dinic求二分图最大匹配:加个源点和汇点,源点连向二分图的一边所有点,二分图的另一边所有点连向汇点,很明显这样得到的最大流就是这个二分图的最大匹配。
#include<cstdio>
#include<algorithm>
#define rep(i,n) for(register int i=1;i<=n;i++)
#define REP(i,a,b) for(register int i=a;i<=b;i++)
using namespace std;
const int N=105;
const int M=10205;
const int INF=(~0u>>1);
struct edge
{
int to,nxt,w;
edge(int to=0,int nxt=0,int w=1):to(to),nxt(nxt),w(w){}
}edges[M<<1];
int n,m,cnt,st,ed,s,t,ans;
int head[M<<1],d[N],q[N];
inline void addEdge(int u,int v)
{
edges[++cnt]=edge(v,head[u]);
head[u]=cnt;
edges[++cnt]=edge(u,head[v],0);
head[v]=cnt;
}
#define cur edges[i].to
inline bool bfs()
{
rep(i,t)d[i]=0;d[s]=1;
st=ed=0;q[st++]=s;
while(ed<st)
{
int k=q[ed++];
for(register int i=head[k];i;i=edges[i].nxt)if(edges[i].w&&!d[cur])
{
d[cur]=d[k]+1;q[st++]=cur;
if(cur==t)return 1;
}
}
return 0;
}
inline int dinic(int x,int f)
{
if(x==t)return f;
int res=f;
for(register int i=head[x];i&&res;i=edges[i].nxt)if(edges[i].w&&d[cur]==d[x]+1)
{
int k=dinic(cur,min(res,edges[i].w));
if(!k)d[cur]=0;
edges[i].w-=k;edges[i^1].w+=k;res-=k;
}
return f-res;
}
int main()
{
scanf("%d%d",&n,&m);s=n+1;t=n+2;cnt=1;
int u,v;
while(scanf("%d%d",&u,&v)==2)addEdge(u,v);
REP(i,1,m)addEdge(s,i);
REP(i,m+1,n)addEdge(i,t);
int flow=0;
while(bfs())while((flow=dinic(s,INF)))ans+=flow;
printf("%d",ans);
return 0;
}
[日常摸鱼]loj6000「网络流 24 题」搭配飞行员的更多相关文章
- LOJ6000 - 「网络流 24 题」搭配飞行员
原题链接 题意简述 求二分图的最大匹配. 题解 这里写的是匈牙利算法. 表示节点的当前匹配. 为真表示在这一轮匹配中,无法给节点一个新的匹配.所以如果为真就不用再dfs它了,直接continue就好. ...
- LibreOJ #6000. 「网络流 24 题」搭配飞行员 最大匹配
#6000. 「网络流 24 题」搭配飞行员 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- LibreOJ #6000. 「网络流 24 题」搭配飞行员
二次联通门 : LibreOJ #6000. 「网络流 24 题」搭配飞行员 /* LibreOJ #6000. 「网络流 24 题」搭配飞行员 二分图最大匹配 Dinic最大流 + 当前弧优化 */ ...
- Loj #6000.「 网络流 24 题 」搭配飞行员
解题思路 考虑如何建模. 既然是网络流,那么肯定要有源点和汇点.而这个题目并没有什么明显的源点和汇点. 想一想,如果一个飞机能够起飞的话,那么必定有一对可以配对的正副驾驶员.也就是说一条曾广路能够上必 ...
- 【刷题】LOJ 6000 「网络流 24 题」搭配飞行员
题目描述 飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭 ...
- LOJ6003 - 「网络流 24 题」魔术球
原题链接 Description 假设有根柱子,现要按下述规则在这根柱子中依次放入编号为的球. 每次只能在某根柱子的最上面放球. 在同一根柱子中,任何2个相邻球的编号之和为完全平方数. 试设计一个算法 ...
- LOJ6002 - 「网络流 24 题」最小路径覆盖
原题链接 Description 求一个DAG的最小路径覆盖,并输出一种方案. Solution 模板题啦~ Code //「网络流 24 题」最小路径覆盖 #include <cstdio&g ...
- LOJ6001 - 「网络流 24 题」太空飞行计划
原题链接 Description 有个实验和个仪器,做实验有报酬买仪器有花费.每个实验都需要一些仪器,求最大净收益(实验报酬仪器花费),并输出一组方案. Solution 实验向所需仪器连边,实验的点 ...
- LibreOJ #6014. 「网络流 24 题」最长 k 可重区间集
#6014. 「网络流 24 题」最长 k 可重区间集 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 ...
随机推荐
- django清理migration终极解决办法
1.django生成数据表结构的过程 在我们设计好models以后,我们可以通过以下命令生成将要同步给数据库的数据结构文件 python manage.py makemigrations 生成的文件在 ...
- P5665 划分
Part 1 先来看一个错误的贪心做法:假设当前结尾的一段和为 \(a\),等待加入结尾的一段和为 \(b\),现在要处理新进来的数 \(c\). \(a\leq b\),将 \(a\) 算入答案,将 ...
- 16_Android的数据存储_ SharedPreference、XML和JSON
1. Android读写首选项 1.1 SharedPreferences SharedPreferences 是一种轻型的数据存储方式,它的本质是基于XML文件存储Key-Value键值对数据,通常 ...
- Python【Python基础】
python的使用 1.python的两个版本:python2.0与python3.0.这两个版本的区别在于python3是不向下兼容python2的组件和扩展的,但是在python2.6和2.7的两 ...
- 老猿学5G:3GPP和中国移动5G计费架构概览
☞ ░ 前往老猿Python博文目录 ░ 一.引言 老猿学5G这个专栏主要记录笔者因工作原因学习了解5G计费相关知识,文章按时间顺序循序渐进的介绍5G基础概念以及5G计费相关知识,该专栏前期已经完结, ...
- 第8.14节 Python类中内置方法__str__详解
一. object类内置方法__str__和函数str 类的内置方法__str__和内置函数str实际上实现的是同一功能,实际上str调用的就是__str__方法,只是调用方式不同,二者的调用语法如下 ...
- 第7章 Python类型、类、协议目录
第7.1节 面向对象程序设计的相关知识 第7.2节 关于面向对象设计的一些思考 第7.3节 Python特色的面向对象设计:协议.多态及鸭子类型 第7.4节 Python中与众不同的类 第7.5节 揭 ...
- PyQt(Python+Qt)学习随笔:invisibleRootItem方法访问QTreeWidget树型部件的隐形根节点
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 我们知道在数据结构上来说,任何树都是有根节点的,但我们在QTreeWidget对象中并没有看到界面上 ...
- PyQt(Python+Qt)学习随笔:QTreeView树形视图的itemsExpandable属性
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTreeView树形视图的itemsExpandable属性用于控制视图中用户是否可以通过操作展开 ...
- Google浏览器PostMan插件版安装步骤
PostMan插件版安装步骤: 第一步:把下载后的.crx扩展名的离线Chrome插件的文件扩展名改成.zip或者.rar 第二步:右键点击该文件,并使用压缩软件(如winrar.360压缩等)对该压 ...