【洛谷P3386】【模板】二分图匹配【网络流】
题目大意:
题目链接:https://www.luogu.org/problemnew/show/P3386
求一个二分图的最大匹配。
思路:
二分图匹配的模板。可以用匈牙利做。
听说这道题卡DinicDinicDinic,但是还是很轻松的过了。可能是加了当前弧优化的缘故吧。
DinicDinicDinic讲解链接:https://www.luogu.org/blog/ONE-PIECE/wang-lao-liu-jiang-xie-zhi-dinic
代码:
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;const int N=1010;
const int Inf=1e9;
int n,m,s,S,T,x,y,tot=1,maxflow,head[N+N],cur[N+N],dep[N+N];struct edge
{int next,to,flow;
}e[N*N];void add(int from,int to,int flow)
{e[++tot].to=to;e[tot].flow=flow;e[tot].next=head[from];head[from]=tot;
}bool bfs()
{memset(dep,0x3f3f3f3f,sizeof(dep));memcpy(cur,head,sizeof(cur)); //当前弧queue<int> q;dep[S]=1;q.push(S);while (q.size()) //分层{int u=q.front();q.pop();for (int i=head[u];~i;i=e[i].next){int v=e[i].to;if (dep[v]>dep[u]+1&&e[i].flow){dep[v]=dep[u]+1;q.push(v);}}}return dep[T]<Inf; //可以流到终点
}int dfs(int u,int flow)
{int low=0;if (u==T) //到达终点{maxflow+=flow;return flow;}int used=0;for (int i=cur[u];~i;i=e[i].next) //当前弧优化{int v=e[i].to;cur[u]=i; //记录if (e[i].flow&&dep[v]==dep[u]+1){low=dfs(v,min(flow-used,e[i].flow)); //流量if (low){used+=low;e[i].flow-=low;e[i^1].flow+=low;if(used==flow) break; //流满了}}}return used; //最大流量
}void dinic()
{while (bfs())dfs(S,Inf);
}int main()
{memset(head,-1,sizeof(head));scanf("%d%d%d",&n,&m,&s);for (int i=1;i<=s;i++){scanf("%d%d",&x,&y);if (x>n||y>m) continue;add(x,n+y,1);add(n+y,x,0);}S=n+m+1;T=n+m+2;for (int i=1;i<=n;i++){add(S,i,1);add(i,S,0);}for (int i=1;i<=m;i++){add(i+n,T,1);add(T,i+n,0);}dinic();printf("%d\n",maxflow);return 0;
}
【洛谷P3386】【模板】二分图匹配【网络流】相关推荐
- 洛谷 P3386 【模板】二分图匹配
洛谷 P3386 [模板]二分图匹配 题目 题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行 ...
- 洛谷P3386:网络流之二分图匹配,最大流算法
二分图:我的理解是,对图中的点集,可分为两个集合U和V,使得两个集合之间存在通路,且集合内部不存在通路.如上图. 匹配:两两不含公共端点的边集合M 最大匹配:边数最多的匹配 完美匹配:最大匹配的匹配数 ...
- 专题·树链剖分【including 洛谷·【模板】树链剖分
初见安~~~终于学会了树剖~~~ [兴奋]当初机房的大佬在学树剖的时候我反复强调过:"学树剖没有前途的!!!" 恩.真香. 一.重链与重儿子 所谓树剖--树链剖分,就是赋予一个链的 ...
- 洛谷·【模板】点分树 | 震波【including 点分树
初见安-这里是传送门:洛谷P6329 [模板]点分树 | 震波 一.点分树 其实你会点分治的话,点分树就是把点分治时的重心提出来重新连城一棵树. 比如当前点是u,求出子树v的重心root后将root与 ...
- 算法模板——二分图匹配
实现功能为二分图匹配 原理:匈牙利算法,核心思想--匹配上了就配,没直接匹配上也要通过前面的腾出位置让这个匹配上(详见:趣写算法系列之--匈牙利算法) 本程序以Codevs2776为例 详见Codev ...
- 洛谷P3386 【模板】二分图匹配
匈牙利算法模板 1 /*by SilverN*/ 2 #include<algorithm> 3 #include<iostream> 4 #include<cstrin ...
- 二分图——洛谷P3386 【模板】二分图匹
https://www.luogu.org/problem/show?pid=3386 匈牙利算法不断寻找增广路: 尽可能让当前枚举的i可以匹配: 时间复杂度自己看代码: #include<cs ...
- 洛谷 P1646 [国家集训队]happiness 网络流 最小割 Dinic+当前弧优化
题目链接: https://www.luogu.com.cn/problem/P1646 参考博客: https://siyuan.blog.luogu.org/solution-p1646 算法:网 ...
- 洛谷.4897.[模板]最小割树(Dinic)
题目链接 最小割树模板.具体见:https://www.cnblogs.com/SovietPower/p/9734013.html. ISAP不知为啥T成0分了.. Dinic: //1566ms ...
最新文章
- 上位机多个下位机modbustcp通讯_【C#上位机】西门子1200PLC实用定位控制程序案例...
- 云路由 vyatta 体验(一)基本设置
- Linux学习之遇到的小问题---查看系统版本,虚拟机创建共享文件夹,用到的命令记录。
- 【最新合集】编译原理习题(含答案)_11-14中间代码生成_MOOC慕课 哈工大陈鄞
- python 之 XML的基本应用总结
- mysql innodb myisam 混合,MySQL MyIsam/InnoDB混合在一起的事务
- ip访问php $_files空,PHP中表单没有问题但$_FILES为空怎么办?
- pytorch回归_PyTorch:用岭回归检查泰坦尼克号下沉
- 外设驱动库开发笔记24:FM24xxx系列FRAM存储器驱动
- mysql变量包括什么意思_什么是mysql变量?
- SPI通信实验---verilog(FPGA作为从机,使用可读可写)
- 基于socketio 写一个聊天室
- java bigdecimal取余_BigDecimal求余操作
- 转]分享一个可以下载全球影像的网站(包括历史影像)
- WMS软件哪个好?排名怎样
- 大华工业相机SDK【QT+ C++】vs2015配置环境
- Mysql数据库规范(阿里巴巴嵩山版java开发手册)
- android webview播放视频黑屏
- 【英语写作】以亚太杯为例
- 【码农学编曲】吉他伴奏
热门文章
- 非常适合新手使用的吉他调音软件!
- 说句心里话python怎么写_说句心里话作文
- micro SD(TF)卡详解
- ui设计教程分享:关于Logo设计要素
- 互联网晚报 | 11月8日 星期一 | 美团外卖公开“订单分配”算法规则;英雄联盟首部动画剧集上线;神舟十三号航天员首次出舱...
- Heartbleed心脏出血原理及漏洞复现(CVE-2014-0106)
- Mac壁纸软件哪款好用?Wallpaper Wizard可以一试
- JVM学习笔记② JVM运行时数据区域
- 王者荣耀:又一新皮肤登场,堪称惊艳 ,网友:三国‘天下无双’
- 多个图元合并其中相邻的图元