1 int g[MAXN][MAXN], match[MAXN], vis[MAXN]; 2 bool dfs(int u) { 3 for (int i = 0; i < MAXN; i++) { 4 if (g[u][i] && !vis[i]) { 5 vis[i] = 1; 6 if (match[i] == -1 || dfs(match[i])) { 7 match[i] = u; 8 return true; 9 } 10 } 11 } 12 return false; 13 } 14 15 int Hungarian(){ 16 int ans = 0; 17 memset(match, -1, sizeof(match)); 18 for (int i = 0; i < MAXN; i++){ 19 memset(vis, 0, sizeof(vis)); 20 if (dfs(i))ans++; 21 } 22 return ans; 23 }