AcWing 861. 二分图的最大匹配(匈牙利算法)
Posted MangataTS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 861. 二分图的最大匹配(匈牙利算法)相关的知识,希望对你有一定的参考价值。
题目连接
https://www.acwing.com/problem/content/863/
思路
我们选择左半边或者右半边作为枚举点,然后对于当前的位置做一次判断如果当前位置的第一条边的女生已经匹配成功了,那么我们就看这个女生的男生还能不能再换一个人,如果能换的话,直接换掉就好了,否则当前男生就看下一个女生,以此类推,最后每成功匹配一个男生就让贡献自增
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 5e2+10, M = 1e5+10;
int n1,n2,m;
vector<int> V[N];
bool vis[N];
int match[N];
int find(int x)
for(int i = 0,l = V[x].size();i < l; ++i)
int j = V[x][i];
if(!vis[j])
vis[j] = true;
if(match[j] == 0 || find(match[j]))
match[j] = x;
return true;
return false;
int main()
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n1>>n2>>m;
for(int i = 1;i <= m; ++i)
int u,v;
cin>>u>>v;
V[u].push_back(v);
int ans = 0;
for(int i = 1;i <= n1; ++i)
memset(vis,0,sizeof vis);
if(find(i)) ans++;
cout<<ans<<endl;
以上是关于AcWing 861. 二分图的最大匹配(匈牙利算法)的主要内容,如果未能解决你的问题,请参考以下文章