二分图
Posted dorkytat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分图相关的知识,希望对你有一定的参考价值。
About二分图
参考博客 by ling_wang
参考博客 by Matrix67
模板题 luogu3386
这里是 匈牙利算法
Code
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
const int N = 1007, M = 1007;
int n, m, e, cnt, ans, nxt[N * M], to[N * M], head[N], ch[1010];
bool vis[1010];
inline int read()
int ans = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9')
if (ch == '-') f = -1;
ch = getchar();
while (ch >= '0' && ch <= '9')
ans = (ans << 3) + (ans << 1) + ch - 48, ch = getchar();
return ans * f;
void add(int u, int v)
nxt[++cnt] = head[u];
to[cnt] = v;
head[u] = cnt;
bool dfs(int k)
for (int i = head[k]; i; i = nxt[i])
int v = to[i];
if (!vis[v])
vis[v] = true;
if (!ch[v] || dfs(ch[v]))
ch[v] = k;
return true;
return false;
int main()
//freopen("testdata.in.txt", "r", stdin);
n = read(), m = read(), e = read();;
for (int i = 1; i <= e; ++i)
int x = read(), y = read();
if (x <= n && y <= m)
add(x, y);
ans = 0;
for (int i = 1; i <= n; i++)
memset(vis, false, sizeof(vis));
if (dfs(i))
ans++;
//else printf("%d\n", i);
printf("%d\n", ans);
return 0;
以上是关于二分图的主要内容,如果未能解决你的问题,请参考以下文章