#include <stdio.h>
#include <string.h>
int g[510][510];
int linker[510];
int used[510];
int n,k,cnt;
int DFS( int u )
{
int v;
for( v = 1; v <= n; v++ )
{
if( g[u][v] && !used[v] )
{
used[v] = 1;
if( linker[v] == -1 ||DFS(linker[v]) )
{
linker[v] = u;
return 1;
}
}
}
return 0;
}
int main()
{
int x,y;
while( ~scanf("%d %d",&n,&k) )
{
memset(g,0,sizeof(g));
for( int i = 0; i < k; i++ )
{
scanf("%d %d",&x,&y);
g[x][y] = 1;
}
memset(linker,-1,sizeof(linker));
for( int i = 1; i <= n; i++ )
{
memset(used,0,sizeof(used));
if( DFS(i) )
cnt++;
}
printf("%d\n",cnt);
}
return 0;
}二分图模板
最新推荐文章于 2025-08-29 23:37:23 发布
599

被折叠的 条评论
为什么被折叠?



