0%

二分图匹配模板

匈牙利算法
时间复杂度:\(O(nm)\)

1
2
3
4
5
6
7
8
9
10
11
12
bool dfs(int x) {
for (int e=head[x];e;e=nxt[e]) {
int v=vet[e];
if (vis[v]) continue;
vis[v]=1;
if (match[v]==-1 || dfs(match[v])) {
match[v]=x;
return true;
}
}
return false;
}
1
2
3
4
5
6
7
int ans=0;
memset(match,-1,sizeof(match));
for (int i=1;i<=n;i++) {
memset(vis,0,sizeof(vis));
if (dfs(i)) ans++;
}