HDU2063(匈牙利算法)

来源:互联网 发布:互联网大会2017 知乎 编辑:程序博客网 时间:2024/05/21 22:26

不断寻找增广路,每找到一条增广路,匹配数加1

#include <cstdio>#include <cstring>#include <vector>using namespace std;int m,bn,gn;vector<int> vec[510];bool b[510];//记录v2的点是否被访问过int lk[510];//记录v2匹配的点bool find(int cur){for(vector<int>::iterator it=vec[cur].begin();it!=vec[cur].end();it++){if(b[*it]) continue;b[*it]=1;if(!lk[*it]||find(lk[*it])){lk[*it]=cur;return 1;}}return 0;}int main(){while(scanf(" %d",&m),m){memset(lk,0,sizeof(lk));scanf(" %d %d",&gn,&bn);for(int i=1;i<=gn;++i)vec[i].clear();int bi,gi;for(int i=0;i<m;++i){scanf(" %d %d",&gi,&bi);vec[gi].push_back(bi);}int ans=0;for(int i=1;i<=gn;++i){memset(b,0,sizeof(b));if(find(i)) ++ans;}printf("%d\n",ans);}}


0 0
原创粉丝点击