二分图最大匹配值,直接裸上匈牙利。
#include <cstdio>
#include <cstring>
using namespace std;
const int N=105;
int n,m;
int a,b;
int ans;
bool vis[N];
int fr[N];
int ga[N][N];
bool find(int x)
{
register int i;
for (i=m+1;i<=n;i++)
{
if (ga[x][i]&&!vis[i])
{
vis[i]=1;
if (!fr[i]||find(fr[i])) {fr[i]=x;return 1;}
}
}
return 0;
}
int main()
{
register int i;
scanf("%d %d ",&n,&m);
while (~scanf("%d %d",&a,&b)) ga[a][b]=1;
for (i=1;i<=m;i++)
{
memset(vis,0,sizeof(vis));
if (find(i)) ans++;
}
printf("%d",ans);
}