二分图最大匹配之匈牙利算法
HDU2063
二分图的最大匹配,用匈牙利算法模板刷之.
算法思想:http://www.byvoid.com/blog/hungary/
#include <algorithm> #include <functional> #define MAX 512 using namespace std; int k,m,n,sum=0,link[MAX]={0}; int path[MAX][MAX]={0},vis[MAX]={0}; bool dfs(int x) { for(int i=1;i<=path[x][0];i++) { int t = path[x][i]; if(vis[t]) { vis[t]=false; if(!link[t] || dfs(link[t])) { link[t]=x; return true; } } } return false; } int main() { while(scanf("%d",&k)!=EOF && k!=0 && scanf("%d%d",&m,&n)!=EOF) { memset(path,false,sizeof(path)); memset(vis,true,sizeof(vis)); memset(link,0,sizeof(link)); sum=0; for(int i=0;i<k;i++) { int a,b; scanf("%d%d",&a,&b); path[a][++path[a][0]]=b; } for(int i=1;i<=m;i++) { memset(vis,true,sizeof(vis)); if(dfs(i)) { sum++; } } printf("%d\n",sum); } return 0; }