二分图的定义:
二分图求最大匹配算法:
匈牙利算法讲解
代码模板:
邻接表
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, int> pli;
typedef pair<ll, ll> pll;
typedef long double ld;
#define mp make_pair
const int N=1e6+10;
const long long INF=1e18;
const double eps=0.0000001;
const ll mod=1e9+7;
ll mul(ll a,ll b){return (a%mod*b%mod)%mod;}
ll pre(ll a,ll b){return (a%mod/b%mod)%mod;}
ll n,m,k,x,y,z;
vector<int>E[1000];
int vis[N];///标记是否访问
int cy[N];///储存右端点匹配的对象
int cx[N];///储存左端点匹配的对象
bool finds(int x)
{
for(int i=0;i<E[x].size();i++)
{
if(!vis[E[x][i]])
{
vis[E[x][i]]=1;
if(!cy[E[x][i]]||finds(cy[E[x][i]]))
{
cx[x]=E[x][i];
cy[E[x][i]]=x;
return 1;
}
}
}
return 0;
}
int main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin>>n>>m>>k;
for(int i=0;i<k;i++)///建图
{
cin>>x>>y;
E[x].push_back(y);
}
int ans=0;///记录匹