匈牙利算法
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> using namespace std;int match[maxn],link[maxn][maxn],used[maxn],ans; bool find(int u) { memset(used,0,sizeof(used)); /*for(int i=first[u];i;i=next[i]) { if(!used[to[i]]) { used[to[i]]=1; if(!match[to[i]] || find(to[i])) { match[to[i]]=u; return true; } } } return false;*/ for(int i=1;i<=n;i++) { if(!used[i] && link[u][i]) { used[i]=1; if(match[i]==0 || find(match[i])) { match[i]=u; return true; } } } return false; } int maxmatch() { for(int i=1;i<=n;i++)if(find(i))ans++; }