代碼如下:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn=500+10;
int v1,v2;
int graph[maxn][maxn];//構建的圖
int visit[maxn];//v2的點是否訪問過
int girl[maxn];//v1所匹配的y;
bool dfs(int x)
{
for(int i=1;i<=v2;i++)
{
if(graph[x][i]&&!visit[i])
{
visit[i]=1;
if(girl[i]==0||dfs(girl[i]))
{
girl[i]=x;
return true;
}
}
}
return false;
}
void solve()
{
memset(girl,0,sizeof(girl));
int cnt=0;
for(int i=1;i<=v1;i++)
{
memset(visit,0,sizeof(visit));//清空上次搜索的標記
if(dfs(i))
cnt++;
}
cout << cnt << endl;
}
int main()
{
int n,m;
scanf("%d %d",&n,&m);
v1=v2=n;
memset(graph,0,sizeof(graph));
for(int i=0;i<m;i++)
{
int x,y;
scanf("%d %d",&x,&y);
graph[x][y]=1;
}
solve();
return 0;
}