OpenJudge1538 Gopher II

来源:互联网 发布:macbook卸载windows 编辑:程序博客网 时间:2024/05/16 18:34

题目: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;}
0 0