题目大意:

题目链接: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】【模板】二分图匹配【网络流】相关推荐

  1. 洛谷 P3386 【模板】二分图匹配

    洛谷 P3386 [模板]二分图匹配 题目 题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行 ...

  2. 洛谷P3386:网络流之二分图匹配,最大流算法

    二分图:我的理解是,对图中的点集,可分为两个集合U和V,使得两个集合之间存在通路,且集合内部不存在通路.如上图. 匹配:两两不含公共端点的边集合M 最大匹配:边数最多的匹配 完美匹配:最大匹配的匹配数 ...

  3. 专题·树链剖分【including 洛谷·【模板】树链剖分

    初见安~~~终于学会了树剖~~~ [兴奋]当初机房的大佬在学树剖的时候我反复强调过:"学树剖没有前途的!!!" 恩.真香. 一.重链与重儿子 所谓树剖--树链剖分,就是赋予一个链的 ...

  4. 洛谷·【模板】点分树 | 震波【including 点分树

    初见安-这里是传送门:洛谷P6329 [模板]点分树 | 震波 一.点分树 其实你会点分治的话,点分树就是把点分治时的重心提出来重新连城一棵树. 比如当前点是u,求出子树v的重心root后将root与 ...

  5. 算法模板——二分图匹配

    实现功能为二分图匹配 原理:匈牙利算法,核心思想--匹配上了就配,没直接匹配上也要通过前面的腾出位置让这个匹配上(详见:趣写算法系列之--匈牙利算法) 本程序以Codevs2776为例 详见Codev ...

  6. 洛谷P3386 【模板】二分图匹配

    匈牙利算法模板 1 /*by SilverN*/ 2 #include<algorithm> 3 #include<iostream> 4 #include<cstrin ...

  7. 二分图——洛谷P3386 【模板】二分图匹

    https://www.luogu.org/problem/show?pid=3386 匈牙利算法不断寻找增广路: 尽可能让当前枚举的i可以匹配: 时间复杂度自己看代码: #include<cs ...

  8. 洛谷 P1646 [国家集训队]happiness 网络流 最小割 Dinic+当前弧优化

    题目链接: https://www.luogu.com.cn/problem/P1646 参考博客: https://siyuan.blog.luogu.org/solution-p1646 算法:网 ...

  9. 洛谷.4897.[模板]最小割树(Dinic)

    题目链接 最小割树模板.具体见:https://www.cnblogs.com/SovietPower/p/9734013.html. ISAP不知为啥T成0分了.. Dinic: //1566ms ...

最新文章

  1. 上位机多个下位机modbustcp通讯_【C#上位机】西门子1200PLC实用定位控制程序案例...
  2. 云路由 vyatta 体验(一)基本设置
  3. Linux学习之遇到的小问题---查看系统版本,虚拟机创建共享文件夹,用到的命令记录。
  4. 【最新合集】编译原理习题(含答案)_11-14中间代码生成_MOOC慕课 哈工大陈鄞
  5. python 之 XML的基本应用总结
  6. mysql innodb myisam 混合,MySQL MyIsam/InnoDB混合在一起的事务
  7. ip访问php $_files空,PHP中表单没有问题但$_FILES为空怎么办?
  8. pytorch回归_PyTorch:用岭回归检查泰坦尼克号下沉
  9. 外设驱动库开发笔记24:FM24xxx系列FRAM存储器驱动
  10. mysql变量包括什么意思_什么是mysql变量?
  11. SPI通信实验---verilog(FPGA作为从机,使用可读可写)
  12. 基于socketio 写一个聊天室
  13. java bigdecimal取余_BigDecimal求余操作
  14. 转]分享一个可以下载全球影像的网站(包括历史影像)
  15. WMS软件哪个好?排名怎样
  16. 大华工业相机SDK【QT+ C++】vs2015配置环境
  17. Mysql数据库规范(阿里巴巴嵩山版java开发手册)
  18. android webview播放视频黑屏
  19. 【英语写作】以亚太杯为例
  20. 【码农学编曲】吉他伴奏

热门文章

  1. 非常适合新手使用的吉他调音软件!
  2. 说句心里话python怎么写_说句心里话作文
  3. micro SD(TF)卡详解
  4. ui设计教程分享:关于Logo设计要素
  5. 互联网晚报 | 11月8日 星期一 | 美团外卖公开“订单分配”算法规则;英雄联盟首部动画剧集上线;神舟十三号航天员首次出舱...
  6. Heartbleed心脏出血原理及漏洞复现(CVE-2014-0106)
  7. Mac壁纸软件哪款好用?Wallpaper Wizard可以一试
  8. JVM学习笔记② JVM运行时数据区域
  9. 王者荣耀:又一新皮肤登场,堪称惊艳 ,网友:三国‘天下无双’
  10. 多个图元合并其中相邻的图元