当前位置: 首页 > 网络知识

【模板】二分图匹配

时间:2026-01-29 09:27:51

洛谷模板题

学了匈牙利算法。

匈牙利算法核心是找增广路经。

可以求出二分图的最大匹配数。

感觉还是挺好理解的。

时间复杂度  邻接矩阵:  邻接表:

空间复杂度  邻接矩阵:  邻接表:

看的这个blog,有些恶趣味。(受不了凤姐那张图。。)

——代码

1 #include <cstdio> 2 #include <cstring> 3 4 using namespace std; 5 6 int n, m, k, cp, cnt; 7 int girl[10010], to[1000001], next[1000001], head[10010]; 8 //girl[i]记录第i个girl所属的boy 9 bool dog[10010]; 10 //dog[i]记录i是否脱单 11 12 inline void add(int x, int y) 13 18 19 int find_girl(int u) 20 34 } 35 } 36 return 0; 37 } 38 39 int main() 40 50 for(i = 1; i <= n; i++) 51 55 printf("%d", cp); 56 return 0; 57 }
View Code

PS:不要在意变量名函数名这些细节。。

但是感觉匈牙利算法好TM慢啊,所以还是学了dinic,用网络流做好了(深搜版isap会超时,日了狗)。

就是再加一个超级源点s连接集合X的点,和一个超级汇点t连接Y的点。

求s到t的最大流就好。

(这个题集合X和集合Y即使数相同也是两个独立的所以得加一个偏移量,还有测试数据表示看不懂了。)

——代码

1 #include <cstdio> 2 #include <cstring> 3 #include <queue> 4 5 using namespace std; 6 7 int n, m, cnt, ans, e; 8 int head[100001], to[2000001], val[2000001], next[2000001], dis[100001], cur[100001]; 9 10 void add(int x, int y, int z) 11 17 18 int dfs(int u, int t, int maxflow) 19 34 } 35 return ret; 36 } 37 38 bool bfs(int s, int t) 39 58 } 59 } 60 return 0; 61 } 62 int main() 64 75 for(i = 1; i <= m; i++) 76 80 for(i = 1; i <= e; i++) 81 87 while(bfs(s, t)) 88 92 printf("%d", ans); 93 return 0; 94 }
View Code



上一篇:[HAOI2006]受欢迎的牛(tarjan缩点)
下一篇:公路修建(Prim)
二分图 模板 最大流 匈牙利算法 最大匹配
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素