zoukankan      html  css  js  c++  java
  • POJ_2536_Gopher II

    题意:n只地鼠,m个地鼠洞,地鼠必须以v的速度在s秒内钻进洞且每个洞仅能容纳一只地鼠,问最少有几只地鼠会被老鹰吃掉。

    分析:最大匹配问题,将s秒内地鼠能够跑到的洞与该地鼠连成一条边,在最后得到的图中使用匈牙利。

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    using namespace std;
    #define Del(x,y) memset(x,y,sizeof(x))
    
    double xx[105],yy[105];
    int n,m;
    int map[105][105],vis[105],link[105];
    
    bool dfs(int x)
    {
        for(int i=1; i<=m; i++)
            if(map[x][i]==1&&vis[i]==0)
            {
                vis[i]=1;
                if(link[i]==-1||dfs(link[i]))
                {
                    link[i]=x;
                    return true;
                }
            }
        return false;
    }
    
    void solve()
    {
        int ans=0;
        Del(link,-1);
        for(int i=1; i<=n; i++)
        {
            Del(vis,0);
            if(dfs(i))
                ans++;
        }
        printf("%d
    ",n-ans);
    }
    
    double dis(int i,double a,double b)
    {
        return sqrt((xx[i]-a)*(xx[i]-a)+(yy[i]-b)*(yy[i]-b));
    }
    
    int main()
    {
        int s,v;
        double p,q;
        while(~scanf("%d%d%d%d",&n,&m,&s,&v))
        {
            for(int i=1; i<=n; i++)
                scanf("%lf%lf",&xx[i],&yy[i]);
            Del(map,0);
            for(int i=1; i<=m; i++)
            {
                scanf("%lf%lf",&p,&q);
                for(int j=1; j<=n; j++)
                {
                    if(dis(j,p,q)<=(s*v))
                        map[j][i]=1;
                }
            }
            solve();
        }
        return 0;
    }
  • 相关阅读:
    View转化为bitmap
    Bitmap 与Drawable相互转换
    android studio 连接不到真机
    解决Android sync无法同步问题
    Stetho管理手机
    android sugar no such table
    android 建数据库的正确写法
    android JSON 数据解析
    android notification 理解
    android aidl 简单使用
  • 原文地址:https://www.cnblogs.com/jasonlixuetao/p/4756178.html
Copyright © 2011-2022 走看看