思路:是求最小点覆盖 = 最大匹配 所以转换成求最大匹配
#include <stdio.h>
#include <string.h>
#define M 505
int map[M][M],xM[M],yM[M],vis[M];
int n;
int dfs (int u)
{
<= n;v ++)
if (map[u][v]&&!vis[v])
{
vis[v] = 1;
if (yM[v] == -1||dfs(yM[v]))
{
yM[v] = u;
xM[u] = v;
return 1;
}
}
0;
}
int MaxMatch()
{
0;
(xM,-1,sizeof(xM));
(yM,-1,sizeof(yM));
<= n;u ++)
if (xM[u] == -1)
{
memset (vis,0,sizeof(vis));
if (dfs (u))
res ++;
}
res;
}
int main ()
{
k,i,j;
("%d%d",&n,&k);
(map,0,sizeof(map));
--)
scanf ("%d%d",&i,&j);
map[i][j] = 1;
MaxMatch ();
("%d\n",ans);
0;
}