【模板】二分图匹配
题目描述
给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数
输入输出格式
输入格式:
第一行,n,m,e
第二至e+1行,每行两个正整数u,v,表示u,v有一条连边
输出格式:
共一行,二分图最大匹配
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; int n, m, e, a[1010][1010], pipei[1010], flag[1010], ans; bool dfs(int u) { for (int i = 1; i <= m; i++) { if (a[u][i]) { if (!flag[i]) { flag[i] = 1; if (!pipei[i] || dfs(pipei[i])) { pipei[i] = u; return true; } } } } return false; } int main() { scanf("%d%d%d", &n, &m, &e); for (int i = 1; i <= e; i++) { int u, v; scanf("%d%d", &u, &v); if (u <= n && v <= m) a[u][v] = 1; } for (int i = 1; i <= n; i++) { memset(flag, 0, sizeof(flag)); if (dfs(i)) ans++; } printf("%d\n", ans); return 0; }