二分图模板
#include<bits/stdc++.h>
#define MAXN 1010
using namespace std;
int nx,ny;
int m;
int cx[MAXN],cy[MAXN];
int x,y;
int e[MAXN][MAXN];
int visited[MAXN];
int ret;
int point(int u)
{
for(int v=1;v<=ny;v++)
{
if(e[u][v]&&!visited[v])
{
visited[v]=1;
if(cy[v]==-1||point(cy[v]))
{
cx[u]=v;
cy[v]=u;
return 1;
}
}
}
return 0;
}
int main()
{
cin>>nx>>ny>>m;
memset(cx,-1,sizeof(cx));
memset(cy,-1,sizeof(cy));
memset(e,0,sizeof(e));
ret=0;
while (m--)
{
cin>>x>>y;
e[x][y]=1;
}
for(int i=1;i<=nx;i++)
{
if(cx[i]==-1)
{
memset(visited,0,sizeof(visited));
ret+=point(i);
}
}
cout<<ret<<endl;
return 0;
}
模板