您的位置:首页 > 理论基础 > 数据结构算法

hdu3829及二分图最大匹配模板

2014-07-24 14:53 190 查看
老题目了,复习了一下匈牙利算法。

#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdlib>
#include<vector>
#define rep(i,a,b) for (int i=a;i<(b+1);i++)
using namespace std;
int n,m,k;
string a[505],b[505];
vector<int> v[505];
int pre[505]={0};
bool vis[505]={false};
int find(int x){
rep(i,0,v[x].size()-1){
int to=v[x][i];
if (vis[to]) continue;
vis[to]=1;
if (pre[to]==-1||find(pre[to])){
pre[to]=x;
return 1;
}
}
return 0;
}
int main(){
while (~scanf("%d%d%d",&n,&m,&k)){
rep(i,1,k) cin>>a[i]>>b[i];
rep(i,1,500) v[i].clear();
rep(i,1,k) rep(j,1,k) if (a[i]==b[j]||b[i]==a[j]){
v[i].push_back(j);
v[j].push_back(i);
}
memset(pre,-1,sizeof pre);
int ans=0;
rep(i,1,k){
memset(vis,false,sizeof vis);
ans+=find(i);
}
printf("%d\n",k-ans/2);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息