/*算鼠到洞的距离。在可能跑到的情况下连一条。在二分匹配。*/
#include <stdio.h>
#include <cstring>
#include <cmath>
bool map[501][501];
bool vis[501];
int match[501];
struct point
{
double x,y;
};
double dis(point a,point b)
{
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
point p1[101];
point p2[101];
int n,m;
bool find(int x)
{
for(int i=1; i<=m; i++)
{
if(map[x][i]&&!vis[i])
{
vis[i]=true;
if(match[i]==-1||find(match[i]))
{
match[i]=x;
return true;
}
}
}
return false;
}
int main()
{
int k,s;
while(scanf("%d%d%d%d",&n,&m,&k,&s)==4)
{
memset(map,false,sizeof(map));
memset(match,-1,sizeof(match));
for(int i=1;i<=n;i++)
scanf("%lf%lf",&p1[i].x,&p1[i].y);
for(int i=1;i<=m;i++)
scanf("%lf%lf",&p2[i].x,&p2[i].y);
double d=k*s*k*s;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(dis(p1[i],p2[j])<=d)
map[i][j]=1;
}
}
int count=0;
for(int i=1;i<=n;i++)
{
memset(vis,false,sizeof(vis));
if(find(i)) count++;
}
printf("%d\n",n-count);
}
return 0;
}
Gopher II 二分最大匹配基础题
最新推荐文章于 2023-02-02 20:39:09 发布