题解: 二分匹配 求最大匹配 套模板就可以 没啥好说的
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
const int N=210;
int n,m,k;
int mp[25][25],match[25],vis[25];
bool dfs(int u)
{
for(int i=0;i<m;i++)
{
if(vis[i]) continue;
if(mp[u][i])
{
vis[i]=1;
if(match[i]==-1||dfs(match[i]))
{
match[i]=u;
return true;
}
}
}
return false;
}
int solve()
{
int ans=0;
for(int i=0;i<n;i++)
{
memset(vis,0,sizeof(vis));
if(dfs(i)) ans++;
}
return ans;
}
int main()
{
int u,v;
while(~scanf("%d",&n) && n)
{
memset(match,-1,sizeof(match));
memset(mp,0,sizeof(mp));
scanf("%d%d",&m,&k);
for(int i=1;i<=k;i++)
{
scanf("%d%d",&u,&v);
mp[u][v]=1;
}
printf("%d\n",solve());
}
return 0;
}