FZU 1341 & POJ 2536 (二分图)

来源:互联网 发布:oracle 防火墙端口 编辑:程序博客网 时间:2024/06/17 03:24
#include<map>#include<queue>#include<cmath>#include<cstdio>#include<stack>#include<iostream>#include<cstring>#include<algorithm>#define LL int#define inf 0x3f3f3f3f#define eps 1e-8#include<vector>#define ls l,mid,rt<<1#define rs mid+1,r,rt<<1|1using namespace std;struct node{    double x,y;}q1[110],q2[110];int cro[1010],c,d,v,cnt,n,m;bool vis[1010],mp[1000][1000];double dis(int i,int j){    return sqrt( (q1[i].x-q2[j].x)*(q1[i].x-q2[j].x)+(q1[i].y-q2[j].y)*(q1[i].y-q2[j].y) );}int dfs(int u){    int i,j,k;    for(i=0;i <m;i++)    {        if(!vis[i]&&mp[u][i])        {            vis[i]=true;            if(cro[i]==-1||dfs(cro[i]))            {                cro[i]=u;                return 1;            }        }    }    return 0;}int main(){    int i,j,k,cla,s,v;        while(~scanf("%d%d%d%d",&n,&m,&s,&v)){            memset(mp,false,sizeof(mp));            for(i = 0;i < n;++i){                double x,y;                scanf("%lf%lf",&x,&y);                q1[i].x =x;                q1[i].y =y;            }            for(i = 0;i <m;++ i){                double x,y;                scanf("%lf%lf",&x,&y);                q2[i].x =x;                q2[i].y =y;            }            for(i = 0;i < n;++ i){                for(j = 0;j < m;++ j){                    double di = dis(i,j);                    double tmp =(double) s*v;                    if(di/v - s <= eps)                        mp[i][j] = true;                }            }            int ans=0;            memset(cro,-1,sizeof(cro));            for(i = 0;i < n;++ i){                 memset(vis,false,sizeof(vis));                 if(dfs(i))                    ans++;            }            printf("%d\n",n-ans);        }    return 0;}
0 0
原创粉丝点击