题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063
题意:中文题。
思路:这就是匈牙利算法算二分图最大匹配的算法,具体思想可以参考这个博客,我觉得很不错:http://blog.csdn.net/dark_scope/article/details/8880547
代码:
#include <cstdio>
#include <cmath>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <numeric>
#include <set>
#include <string>
#include <cctype>
#include <sstream>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long LL;
typedef pair<LL, LL> P;
const int maxn = 1e5 + 5;
const int mod = 1e8 + 7;
int k,m,n;
int G[505][505];
int vis[505],used[505];
bool Find(int x){
for (int i=1;i<=n;i++){
if (!vis[i]&&G[x][i]){
vis[i]=1;
if (!used[i]||Find(used[i])){
used[i]=x;
return 1;
}
}
}
return 0;
}
int main() {
while (~scanf ("%d%d%d",&k,&m,&n)&&k){
memset(G,0,sizeof(G));
memset(used,0,sizeof(used));
while (k--){
int u,v;
scanf ("%d%d",&u,&v);
G[u][v]=1;
}
int ans=0;
for (int i=1;i<=m;i++){
memset(vis,0,sizeof(vis));
if (Find(i)) ans++;
}
printf ("%d\n",ans);
}
return 0;
}
本文提供了一道关于二分图最大匹配问题的题解,使用了匈牙利算法来解决该问题,并附带了完整的C++代码实现。通过此题解,读者可以更好地理解匈牙利算法的原理及其应用。
&spm=1001.2101.3001.5002&articleId=78857731&d=1&t=3&u=15c3ec7b85a34cfe9cfb1531b82deb75)
6万+

被折叠的 条评论
为什么被折叠?



