二分图最大匹配就是一个暴力的dfs(个人认为)
思想是先匹配,一旦有一个人匹配不了就将他能匹配的那个人的对象(搞掉)
让他去找另外一个人,当找不到在回来找到了两者都有对象
练习题 :https://www.51nod.com/Challenge/Problem.html#!#problemId=2006
练习题ac代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
const ll maxn = 1e5 + 5;
const ll mod = 10000000007;
ll n,m;
ll a[105][105];//飞行员匹配图
ll flag[105];
ll b[105];//英国飞行
//匹配
ll mate(ll x)
{
for(int i = 1; i <= n - m; i ++)
{
if(a[x][i] == 1 && flag[i] == 0)
{
flag[i] = 1;
if(b[i] == 0 || mate(b[i]))//看这个人有对象没,或者他对象能不能找到另外一个
{
b[i] = x;
return 1;
}
}
}
return 0;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin >> m >> n;
ll x,y;
while(cin >> x >> y)
{
if(x == -1 && y == -1)break;
a[x][y - m] = 1;
}
ll sum = 0;
for(int i = 1; i <= m; i ++)
{
memset(flag,0,sizeof(flag));
if(mate(i))
{
sum ++;
}
}
cout << sum << endl;
return 0;
}