洛谷P3386:网络流之二分图匹配,最大流算法
二分图:我的理解是,对图中的点集,可分为两个集合U和V,使得两个集合之间存在通路,且集合内部不存在通路。如上图。
匹配:两两不含公共端点的边集合M
最大匹配:边数最多的匹配
完美匹配:最大匹配的匹配数满足2*M=点的总数
二分图匹配:二分图中的匹配
实际上,可将二分图最大匹配问题看作是最大流问题的特殊情况。
最大流方法解决二分图匹配:
将原图中的所有无向边e改为有向边,方向从U到V,容量为1.增加原点s和汇点t,从s向所有的顶点u∈U连一条容量为1的边,从所有的顶点v∈V连一条容量为1的边。
ff方法解决二分图匹配(洛谷p3386):
class Main{static int maxn=1010;static ArrayList<edge> G[]=new ArrayList[2*maxn];static boolean vis[]=new boolean[2*maxn];static class edge{int to,cap,rev;public edge(int to,int cap,int rev) {this.to=to;this.cap=cap;this.rev=rev;}}static boolean dfs(int v,int t){if(v==t){return true;}vis[v]=true;int u,cap,rev;for(int i=0;i<G[v].size();i++){u=G[v].get(i).to;cap=G[v].get(i).cap;rev=G[v].get(i).rev;if(!vis[u]&&cap>0&&dfs(u,t)){G[u].get(rev).cap++;G[v].get(i).cap--;return true;}}return false;}static void add_edge(int v,int u){G[v].add(new edge(u,1,G[u].size()));G[u].add(new edge(v,0,G[v].size()-1));}static int max_flow(int s,int t){int res=0;for(;;){for(int i=0;i<2*maxn;i++) {vis[i]=false;}if(dfs(s,t)) {res++;}else {break;}}return res;}public static void main(String args[]){InputReader sc=new InputReader(System.in);PrintWriter out =new PrintWriter(System.out);int n=sc.nextInt();int m=sc.nextInt();int e=sc.nextInt();for(int i=1;i<=n+m+10;i++) {G[i]=new ArrayList<>();}int u,v;for(int i=0;i<e;i++) {u=sc.nextInt();v=sc.nextInt();if(v<=m&&u<=n) {add_edge(u, v+n);}}int s=n+m+1;int t=s+1;G[s]=new ArrayList<edge>();G[t]=new ArrayList<edge>();for(int i=1;i<=n;i++) {add_edge(s, i);}for(int i=n+1;i<=n+m;i++) {add_edge(i, t);}out.println(max_flow(s,t));out.flush();out.close();}
}
洛谷P3386:网络流之二分图匹配,最大流算法相关推荐
- 洛谷P1640 连续攻击游戏 二分图匹配
给出n≤1e6n\leq1e6n≤1e6个装备,每个装备都有两个属性值,它的范围一定在[1,10000][1,10000][1,10000],你每个装备只能选择一个属性值,然后要求出最长的一段从111 ...
- 洛谷 P3386 【模板】二分图匹配
洛谷 P3386 [模板]二分图匹配 题目 题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行 ...
- HDU 2063 过山车 (二分图匹配之匈牙利算法)
过山车 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 【洛谷P3386】【模板】二分图匹配【网络流】
题目大意: 题目链接:https://www.luogu.org/problemnew/show/P3386 求一个二分图的最大匹配. 思路: 二分图匹配的模板.可以用匈牙利做. 听说这道题卡Dini ...
- 「LibreOJ Round #11」Misaka Network 与测试 (网络流跑二分图匹配)
description 研究者们想要测试 Misaka Network,于是他们把 Misaka Network 中的所有妹妹们召集到了一起. 现在妹妹们排成了 N行 M 列,有的位置没有人.现在研究 ...
- P3386 【模板】二分图匹配(匈牙利算法)
展开 题目背景 二分图 感谢@一扶苏一 提供的hack数据 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入格式 第一行,n,m,e 第二至e+1行,每行两个正整数u ...
- 紫书:二分图匹配 最大流解决
网络流的一个经典应用是二分图匹配. 匹配是指:两两没有公共点的边集. 二分图是指:可以把结点集分成两部分X和Y,使得每条边恰好一个端点在XXX,另一个端点在YYY.换句话说,同色节点不相邻,进行二染色 ...
- 洛谷 P4012 深海机器人问题【费用流】
题目链接:https://www.luogu.org/problemnew/show/P4012 洛谷 P4012 深海机器人问题 输入输出样例 输入样例#1: 1 1 2 2 1 2 3 4 5 6 ...
- 二分图匹配 Hopcroft-Carp (HK) 算法详解 附例题
了解这个算法之前 首先了解一个概念 :增广路 增广路 :简单的说 ,是二分图匹配中的一条边,他总是从 左边集合的一个点出发通过一条没有被匹配的边连接到右边集合,再从该点通过一条 匹配过的边连接到右边集 ...
最新文章
- FPGA中如何实现双边沿采样?
- python零基础怎么学-编程零基础应当如何开始学习 Python?
- poj2186强联通(牛仰慕)
- 15. 3Sum_左右开工,遍历找出符合目标的数字
- c语言的boolean_0基础学习C语言第四章:三种基本结构
- 【VS2008无法启动asp.net development server】的解决
- Oracle 从入门到精通视频教程(11G版本)
- jquery效果插件网址
- 【web前端期末大作业】html在线网上书店 基于html制作我的书屋(23页面)
- 黑科技 | 电脑必备黑科技软件
- 使用python画二元二次函数(笔记)
- 简单漂亮的流程图模板分享
- html知识点整理(全)
- wireshark找不到捕获接口问题和net start npf 服务器名无效、拒绝访问的解决办法
- java高校心理测评管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
- 数字万用表数字多用表软件下载安装教程
- C语言 队列(循环队列和链队初始化进出队等基本操作)
- SIM900A保姆级调试日记
- Web死链扫描神器之LinkChecker
- Glass-theme cod mw2 for win7|Windows7主题下载
热门文章
- Databricks Secrets(机密)
- 不要被约束的意思_不想被束缚的说说
- Java中都是值传递 pass-by-value
- Mac系统下wow自动钓鱼python实现
- ltsc系统升级为服务器,微软宣布Win11将像Win10一样每月提供更新 且有长期服务版本LTSC...
- [Swift]LeetCode38. 报数 | Count and Say
- [翻译] Overleaf 中的语法检查 - Spell check language
- 从菜鸟到架构师(一)
- 开启Mac的壁纸自动更换功能
- 数码相机和单反相机有什么区别?(已解决)