匈牙利演算法 最大匹配 模板
阿新 • • 發佈:2018-12-19
#include <bits/stdc++.h> using namespace std; const int MAXN = 1005; int n, m, e; int match[MAXN]; bool g[MAXN][MAXN], vis[MAXN]; bool dfs(int u) { for(int v = 1; v <= m; v++) if(g[u][v] && !vis[v]) { vis[v] = 1; if(match[v] == -1 || dfs(match[v])) { match[v] = u; return 1; } } return 0; } inline int Maxmatch() { memset(match, -1, sizeof match); int ret = 0; for(int i = 1; i <= n; i++) { memset(vis, 0, sizeof vis); ret += dfs(i); } return ret; } int main() { int x, y; scanf("%d%d%d", &n, &m, &e); while(e--) { scanf("%d%d", &x, &y); if(x <= n && y <= m) g[x][y] = 1; } printf("%d\n", Maxmatch()); }
O(n^3)