problem

  • 给出一张二分图
  • 求最大匹配

solution

  • 新建一个源点s和汇点t
  • 从源点s到集合A各连一条边,容量为1
  • 从集合B到汇点t到各连一条边,容量为1
  • 让二分图内部的边容量为1

很容易发现,形成的新的n+2个点,n+m条边的网络的最大流量就是二分图的最大匹配数。

于是就变成了最大流模板。

codes

#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
typedef long long LL;
const int maxn = 110, maxm = 5050<<1;int n, m, s, t;
int tot=1, head[maxn], Next[maxm], ver[maxm], edge[maxm];
void AddEdge(int x, int y, int z){ver[++tot] = y;  edge[tot] = z;Next[tot] = head[x]; head[x] = tot;ver[++tot] = x;  edge[tot] = 0;Next[tot] = head[y];  head[y] = tot;
}queue<int>q;
LL dep[maxn], maxflow;
bool bfs(){memset(dep,0,sizeof(dep));while(q.size())q.pop();q.push(s); dep[s] = 1;while(q.size()){int x = q.front();  q.pop();for(int i = head[x]; i; i = Next[i]){if(edge[i] && !dep[ver[i]]){q.push(ver[i]);dep[ver[i]] = dep[x]+1;if(ver[i] == t)return true;}}}return false;
}
int findpath(int x, int flow){if(x == t)return flow;int rest = flow;for(int i = head[x]; i && rest; i = Next[i]){if(edge[i] && dep[ver[i]]==dep[x]+1){int k = findpath(ver[i], min(rest, edge[i]));if(!k)dep[ver[i]] = 0;edge[i] -= k;edge[i^1] += k;rest -= k;}}return flow-rest;
}
int dinic(int s, int t){LL flow = 0;while(bfs())while(flow=findpath(s,1<<30))maxflow += flow;return maxflow;
}int main(){cin>>n>>m;int a, b;while(cin>>a>>b){if(a>b)swap(a,b);AddEdge(a,b,1);}s = 0, t = n+1;for(int i = 1; i <= m; i++)AddEdge(s,i,1);for(int i = m+1; i <= n; i++)AddEdge(i,t,1);cout<<dinic(s,t)<<'\n';return 0;
}

【网络流24题】【LOJ6000】搭配飞行员(二分图最大匹配,最大流Dinic)相关推荐

  1. 【网络流24题】搭配飞行员(最大流+二分图匹配)

    传送门 搭配飞行员     题意:二分图匹配裸题,不多说 I think Dinic算法跑最大流解决||匈牙利算法 Code 代码一:Dinic #include<cstdio> #inc ...

  2. 【网络流24题】魔术球问题(最大流)

    [网络流24题]魔术球问题(最大流) 题面 Cogs 题解 是不是像极了最小路径覆盖? 因此,我们枚举放到哪一个球(也可以二分) 然后类似于最小路径覆盖的连边 因为一根柱子对应一个路径的覆盖 所以,提 ...

  3. 【网络流24题】星际转移问题(最大流)

    [网络流24题]星际转移问题(最大流) 题面 Cogs 题解 因为天数是未知的,所以我们要想办法处理天数 可以选择二分或者依次累加天数 因为数据范围较小,使用二分可能反而复杂度会增高 所以使用不断累加 ...

  4. [网络流24题][CODEVS1922]骑士共存问题(最大流)

    问题描述 传送门 题解 首先介绍ATP神犇的做法: 和方格取数3几乎一样,黑白染色,可以发现能攻击到的点颜色不同. 那么从超级源向每一个黑点连边,容量为1,从每一个白点向超级汇连边,容量为1:从黑点向 ...

  5. 【网络流24题----01】飞行员配对方案问题

    [问题描述] 飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如 ...

  6. 网络流24题(1) P2756 飞行员配对方案问题

    题目链接 题意:求一个最大的二分匹配,网络流最大流,自己造一个源点一个汇点,源点0到1~m流为1,m+1~n到汇点n+1流为1,然后就是题目给出的也是流为1,图就是这样的,套dinic一个板子,但是题 ...

  7. 【loj】#6004. 「网络流 24 题」圆桌聚餐(二分图匹配)

    记录一个菜逼的成长.. 题目链接 二分图匹配,由于一个代表只能一桌,同一个代表团不能坐同一桌 所以代表团跟桌的流量设为1 #include <bits/stdc++.h> using na ...

  8. 线性规划与网络流24题 运输问题(最裸的费用流了)

    存费用流模板 用sfpa算出最小费用和路径,沿这条路径增广 1 const 2 inf=maxlongint; 3 var 4 n,m:longint; 5 map,a,w:array[0..120, ...

  9. [网络流24题][CODEVS1916]负载平衡问题(费用流)

    题目描述 传送门 题解 首先拆点,分XiYi,对应每个仓库. 从源点向Xi连边,容量为ri,费用为0: 从Yi向汇点连边,容量为xba,费用为0: 从Xi向对应的Yi连边,容量为INF,费用为0: 从 ...

  10. [网络流24题][CODEVS1237]餐巾计划问题(费用流)

    题目描述 传送门 题解 拆点,把每天的点拆成xi和yi,xi表示每一天的脏毛巾,yi表示每一天的新毛巾. 从超级源向xi连边,容量为ri,费用为0: 从yi向超级汇连边,容量为ri,费用为0: 从超级 ...

最新文章

  1. 杂题之循环移动字符串
  2. 10万,买一辆自驾无忧的智能汽车
  3. 社会阶层及由此引起的社会动力学现象
  4. rejection from MPhil in Technology policy at cambridge
  5. Hbase学习-一步一步慢慢来
  6. dp、px之间单位转换Util
  7. 将下图的nfa确定化为dfa_实战技术利用AutoCAD确定PCB板型
  8. php开心农场 源码,开心农场源码(UCHome)PHP版下载
  9. 计算机二级怎么样分屏方便,一招实现电脑分屏,比你想象中更简单
  10. 阿里云 linux mysql数据库_mysql 导入数据库 linux
  11. 计算机win7设置用户密码,Win7怎么设置密码 win7设置开机密码教程
  12. 『团队协作的五大障碍』读书所得
  13. flink cdc 2.2.1 mysql connector
  14. 热门在线项目管理工具
  15. 通达+oa+php+文件+乱,通达OA 任意文件上传+文件包含导致RCE
  16. (三)学习目标检测的第3个月
  17. Kibana KQL语法
  18. 2021-02-08 项目验收文件——应用情况说明
  19. 【 Java基础】试试通俗易懂的Lambda表达式?
  20. matlab/simulink 转速功角发电机相轨迹分析,转速功角曲线,电力系统暂态稳定分析,四机两区系统,ieee39节点系统

热门文章

  1. Git 基础(七)—— 远程仓库(GitHub)
  2. 机器学习基础(四十三)—— kd 树( k 近邻法的实现)
  3. mysql 数据库备份与恢复_mysql 数据库备份与还原
  4. 比亚迪汉鸿蒙系统测评_深度:预判比亚迪汉EV电驱动系统技术状态
  5. 免费python网络课程-python网络课程
  6. python语言能做什么-Python是什么_python能做什么
  7. 手机上有没有学python的软件-哪个手机软件有python题库
  8. python从入门到精通-100G Python从入门到精通全套资料!
  9. micropython和python区别-选择C/C++还是选择MicroPython来开发?(第0章-第三节)
  10. 方正畅听 文字识别自动语音朗读软件