FOJ1341 Gopher II

来源:互联网 发布:开源微信商城系统php 编辑:程序博客网 时间:2024/06/05 20:38

题意:输入n,m,s,v  然后给出n个地鼠坐标和m个洞坐标,v是地鼠跑的速度,一个洞里只能待一只地鼠,问s秒后最多有多少只地鼠被攻击(没被抓到)。

二分图

#include<stdio.h>#include<string.h>#include<math.h>#include<vector>#include<iostream>#include<algorithm>using namespace std;const int N=105;#define eps 1e-8vector<int>vt[N];struct point{    double x,y;}point[N],d[N];bool vis[N];int pre[N];double dis(int i,int j){    double tmp=(point[i].x-d[j].x)*(point[i].x-d[j].x)+(point[i].y-d[j].y)*(point[i].y-d[j].y);    return sqrt(tmp);}int find(int k){    int i;    for(i=0;i<vt[k].size();i++){        int j=vt[k][i];        if(vis[j])continue;        vis[j]=1;        if(pre[j]==-1 || find(pre[j])){            pre[j]=k;            return 1;        }    }    return 0;}int main(){    int i,j;    int n,m;    double s,v;    while(cin>>n>>m>>s>>v){        for(i=1;i<=n;i++){            scanf("%lf %lf",&point[i].x,&point[i].y);        }        for(i=1;i<=m;i++){            scanf("%lf %lf",&d[i].x,&d[i].y);        }        for(i=1;i<=n;i++)vt[i].clear();        for(i=1;i<=n;i++){            for(j=1;j<=m;j++){                if(s*v-dis(i,j)>eps)vt[i].push_back(j);            }        }        int ans=0;        memset(pre,-1,sizeof(pre));        for(i=1;i<=n;i++){            memset(vis,false,sizeof(vis));            if(find(i))ans++;        }        printf("%d\n",n-ans);    }    return 0;}

0 0
原创粉丝点击