首页 > TAG信息列表 > P3386

P3386 【模板】二分图最大匹配 题解(匈牙利算法)

题目连接 题目思路 如果不要去证明这个算法的正确性的话,我认为这只能算是一个简单贪心的dfs 可能一直被它高深的名字骗了没有去深入学习 时间复杂度\(O(nm)\) \(n\)代表点数,\(m\)代表边数 算法流程大概是如下 参考洛谷的题解 1.从任意一个没有被配对的点x开始,从点x的边中任意选一

P3386 【模板】二分图匹配

题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 输出格式:共一行,二分图最大匹配 输入输出样例 输入样例#1:  1 1 1 1 1 输出样例#1:  1 说明 n,m

P3386 【模板】二分图最大匹配 题解

博客园同步 原题链接 简要题意: 给定两个点集与一些边(保证每条边的顶点属于不同点集),求二分图最大匹配。 解释下:二分图最大匹配 就是 最大的边集使得每两条边都不相交,不共点 的边的个数。 那么你会说,我用并查集维护一下就行了?远远不是这样。 本题作为 匈牙利算法 的模板题讲解

P3386 【模板】二分图匹配

P3386 【模板】二分图匹配 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn = 2005, inf = 0x3f3f3f; 4 struct Edge { 5 int from, to, cap, flow; 6 }; 7 8 struct Dinic { 9 int n, m, s, t;10 vector<Edge> edges;11 vector&l

洛谷 P3386 二分图匹配 题解

题面 这道题虽然是练习匈牙利算法的,但可以用网络流来切掉它; 我们可以建立一个超级源和一个超级汇,超级源连接左部分点,超级汇连接右部分点; 然后在该图上跑最大流就可以了; PS:我设的超级源是2001,超级汇是2002;   #include <bits/stdc++.h>using namespace std;struct littlestar{

Dinic二分图匹配 || Luogu P3386

题面:【模板】二分图匹配 思路:Dinic实现二分图匹配,要建一个超级源点(S)和超级汇点(T),分别定为N+M+1和N+M+2 然后S去和N中的数建正边和反边,正边权值为1,反边权值为0;M中的数去与T建正边和反边,正边权值为1。 N、M之间的数建图一样。 然后就去跑最大流。 注意:在Dinic函数中每次更新Cur的值时,