匈牙利算法,即为求解二分图最大匹配的一种 O ( n 3 ) O(n^3) O(n3) 算法
其思路在于对于每一个点,查询一条增广路
如果这个点有增广路就让答案加1
代码除输入没有不同
以P3386为例,代码:
#include<bits/stdc++.h>
using namespace std;
int npy[501],vis[501];
vector<int> bg[501];
int dfs(int u,int rt)
{
if(vis[u]==rt)return 0;
vis[u]=rt;
for(auto v:bg[u])
{
if((npy[v]==0)||dfs(npy[v],rt))
{
npy[v]=u;
return 1;
}
}
return 0;
}
int main()
{
int n,m,e,u,v,ans=0;
cin>>n>>m>>e;
for(int i=0;i<e;i++)
{
cin>>u>>v;
bg[u].push_back(v);
}
for(int i=1;i<=n;i++)ans+=dfs(i,i);
cout<<ans;
return 0;
}
文章同步发表于此