题目:http://noi.openjudge.cn/ch0403/1538/
分析:裸二分图匹配
代码:
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int Tmax=105;
int n,m,ss,vv,limit,s[Tmax],ans;
double data[Tmax][2];
bool map[Tmax][Tmax],v[Tmax];
bool dfs(int x)
{
int i;
for(i=1;i<=m;i++)
if(!v[i]&&map[x][i])
{
v[i]=true;
if(s[i]==0||dfs(s[i]))
{
s[i]=x;
return true;
}
}
return false;
}
int main()
{
int i,j;
double x,y;
while(scanf("%d%d%d%d",&n,&m,&ss,&vv)==4)
{
memset(s,0,sizeof(s));memset(map,0,sizeof(map));ans=0;
limit=ss*vv;
for(i=1;i<=n;i++)
scanf("%lf%lf",&data[i][0],&data[i][1]);
for(i=1;i<=m;i++)
{
scanf("%lf%lf",&x,&y);
for(j=1;j<=n;j++)
if((x-data[j][0])*(x-data[j][0])+(y-data[j][1])*(y-data[j][1])<=1.0*limit*limit)
map[j][i]=true;
}
for(i=1;i<=n;i++)
{
memset(v,0,sizeof(v));
if(dfs(i)) ans++;
}
printf("%d\n",n-ans);
}
return 0;
}