裸题
#include<bits/stdc++.h>
using namespace std;
int n,m,mp[505][505],match[505],used[505];
bool find(int x)
{
int i,j;
for(j=1;j<=m;j++)
{
if(mp[x][j] && used[j]==0)
{
used[j]=1;
if(match[j]==-1||find(match[j]))
{
match[j]=x;
return 1;
}
}
}
return 0;
}
int main()
{
int i,j,k,a,b,c,all;
while(~scanf("%d%d",&n,&m))
{
memset(mp,0,sizeof(mp));
while(~scanf("%d%d",&a,&b)&&a+b!=-2)
{
mp[a][b-n]=1;
}
all=0;
memset(match,-1,sizeof(match));
for(i=1;i<=n;i++)
{
memset(used,0,sizeof(used));
if(find(i)) all++;
}
cout<<all<<endl;
}
}