这个题的大意是:
有个人用一种威力巨大的武器可以打爆小行星,给定一个区域内所有的小行星坐标,问最少能用多少次这种武器打爆所有的小行星。
这是一个二分图匹配的模版题,以每一个小行星的X,Y坐标做二分图,然后上模版。
下面是代码:
#include <stdio.h>
#include <string.h>
const int M=500;
int n,k,map1[M][M],vis[M],link[M],m;
bool dfs(int x)
{
for(int y=1; y<=n; y++)
{
if(map1[x][y] && !vis[y])
{
vis[y]=true;
if(link[y]==0 || dfs(link[y])) //link[y]==0 :
{
link[y]=x;
return true;
}
}
}
return false;
}
void hungray()
{
int i;
for(i=1; i<=n; i++)
{
memset(vis,false,sizeof(vis));
if(dfs(i))
{
m++;
}
}
}
int main()
{
scanf("%d%d",&n,&k);
memset(map1,0,sizeof(map1));
memset(link,0,sizeof(link));
int x,y,i;
for(i=0; i<k; i++)
{
scanf("%d%d",&x,&y);
map1[x][y]=1;
}
m=0;
hungray();
printf("%d\n",m);
return 0;
}