二分图:我的理解是,对图中的点集,可分为两个集合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:网络流之二分图匹配,最大流算法相关推荐

  1. 洛谷P1640 连续攻击游戏 二分图匹配

    给出n≤1e6n\leq1e6n≤1e6个装备,每个装备都有两个属性值,它的范围一定在[1,10000][1,10000][1,10000],你每个装备只能选择一个属性值,然后要求出最长的一段从111 ...

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

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

  3. HDU 2063 过山车 (二分图匹配之匈牙利算法)

    过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  4. 【洛谷P3386】【模板】二分图匹配【网络流】

    题目大意: 题目链接:https://www.luogu.org/problemnew/show/P3386 求一个二分图的最大匹配. 思路: 二分图匹配的模板.可以用匈牙利做. 听说这道题卡Dini ...

  5. 「LibreOJ Round #11」Misaka Network 与测试 (网络流跑二分图匹配)

    description 研究者们想要测试 Misaka Network,于是他们把 Misaka Network 中的所有妹妹们召集到了一起. 现在妹妹们排成了 N行 M 列,有的位置没有人.现在研究 ...

  6. P3386 【模板】二分图匹配(匈牙利算法)

    展开 题目背景 二分图 感谢@一扶苏一 提供的hack数据 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入格式 第一行,n,m,e 第二至e+1行,每行两个正整数u ...

  7. 紫书:二分图匹配 最大流解决

    网络流的一个经典应用是二分图匹配. 匹配是指:两两没有公共点的边集. 二分图是指:可以把结点集分成两部分X和Y,使得每条边恰好一个端点在XXX,另一个端点在YYY.换句话说,同色节点不相邻,进行二染色 ...

  8. 洛谷 P4012 深海机器人问题【费用流】

    题目链接:https://www.luogu.org/problemnew/show/P4012 洛谷 P4012 深海机器人问题 输入输出样例 输入样例#1: 1 1 2 2 1 2 3 4 5 6 ...

  9. 二分图匹配 Hopcroft-Carp (HK) 算法详解 附例题

    了解这个算法之前 首先了解一个概念 :增广路 增广路 :简单的说 ,是二分图匹配中的一条边,他总是从 左边集合的一个点出发通过一条没有被匹配的边连接到右边集合,再从该点通过一条 匹配过的边连接到右边集 ...

最新文章

  1. FPGA中如何实现双边沿采样?
  2. python零基础怎么学-编程零基础应当如何开始学习 Python?
  3. poj2186强联通(牛仰慕)
  4. 15. 3Sum_左右开工,遍历找出符合目标的数字
  5. c语言的boolean_0基础学习C语言第四章:三种基本结构
  6. 【VS2008无法启动asp.net development server】的解决
  7. Oracle 从入门到精通视频教程(11G版本)
  8. jquery效果插件网址
  9. 【web前端期末大作业】html在线网上书店 基于html制作我的书屋(23页面)
  10. 黑科技 | 电脑必备黑科技软件
  11. 使用python画二元二次函数(笔记)
  12. 简单漂亮的流程图模板分享
  13. html知识点整理(全)
  14. wireshark找不到捕获接口问题和net start npf 服务器名无效、拒绝访问的解决办法
  15. java高校心理测评管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  16. 数字万用表数字多用表软件下载安装教程
  17. C语言 队列(循环队列和链队初始化进出队等基本操作)
  18. SIM900A保姆级调试日记
  19. Web死链扫描神器之LinkChecker
  20. Glass-theme cod mw2 for win7|Windows7主题下载

热门文章

  1. Databricks Secrets(机密)
  2. 不要被约束的意思_不想被束缚的说说
  3. Java中都是值传递 pass-by-value
  4. Mac系统下wow自动钓鱼python实现
  5. ltsc系统升级为服务器,微软宣布Win11将像Win10一样每月提供更新 且有长期服务版本LTSC...
  6. [Swift]LeetCode38. 报数 | Count and Say
  7. [翻译] Overleaf 中的语法检查 - Spell check language
  8. 从菜鸟到架构师(一)
  9. 开启Mac的壁纸自动更换功能
  10. 数码相机和单反相机有什么区别?(已解决)