POJ 2536 Gopher II (二分图最大匹配)

原创 2015年11月17日 18:53:36

题目链接:http://poj.org/problem?id=2536


题意:有若干只田鼠,给出他们的坐标,有若干个洞,同样给出坐标,当遇到危险时田鼠可以在s秒内跑进一个洞,但一个洞只能容纳一只地鼠,给出田鼠的速度v,问遇到危险最多有多少只田鼠可以进洞


思路:如果田鼠i与地洞j的距离少于s*v,则代表它可以进入该洞,G[i][j]=1,建立二分图,用匈牙利算法求最大匹配


#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
//#include <cmath>
#define maxn 130
#define eps 0.00000001
using namespace std;

double x1[maxn],y1[maxn],x2[maxn],y2[maxn];
int G[maxn][maxn],list[maxn],vis[maxn];
int n,m,s,vv;

int check(int u,int v)
{
    double dis=(x1[u]-x2[v])*(x1[u]-x2[v])+(y1[u]-y2[v])*(y1[u]-y2[v]);
   // cout<<dis<<"::::"<<s*s<<endl;
    if (dis<=s*s*vv*vv) return 1;

    else return 0;
}

int find(int u)
{
    for (int i=0;i<m;i++)
    {
        if (G[u][i]==1 && vis[i]==0)
        {
            vis[i]=1;
            if (list[i]==-1 || find(list[i]))
            {
                list[i]=u;
                return 1;
            }
        }
    }
    return 0;
}

int hungry()
{
    int sum=0;
    for (int i=0;i<n;i++)
    {
        memset(vis,0,sizeof(vis));
        if (find(i)) sum++;
    }
    return sum;
}



int main()
{

    while (scanf("%d%d%d%d",&n,&m,&s,&vv)!=EOF)
    {
        memset(G,0,sizeof(G));
        memset(list,-1,sizeof(list));
        for (int i=0;i<n;i++)
        {
            scanf("%lf%lf",&x1[i],&y1[i]);
        }

        for (int j=0;j<m;j++)
        {
            scanf("%lf%lf",&x2[j],&y2[j]);
        }

        for (int i=0;i<n;i++)
        {
            for (int j=0;j<m;j++)
            {
                if (check(i,j))
                {
                   G[i][j]=1;//cout<<i<<":"<<j<<endl;
                }
            }
        }
        int res=n-hungry();
        printf("%d\n",res);
    }
}


POJ2536 Gopher II(二分图最大匹配)

Gopher II Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9005   Accepted: 3724 ...

POJ 2536 Gopher II(二分图的最大匹配)

题目链接:http://poj.org/problem?id=2536 题意:已知有n只老鼠的坐标,m个洞的坐标,老鼠的移动速度为V,S秒以后有一只老鹰要吃老鼠,问有多少个老鼠被吃。 很明晰,二...

poj 2536 Gopher II 二分图最大匹配

题意: 有n只鼠和mg
  • sepNINE
  • sepNINE
  • 2014年11月13日 15:56
  • 355

poj 2536 Gopher II(二分图最大匹配,构图)

Gopher II Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8347   Acce...
  • acm_cxq
  • acm_cxq
  • 2016年07月26日 21:04
  • 137

【二分图+最大匹配】北大 poj 2536 Gopher II

/* THE PROGRAM IS MADE BY PYY */ /*-----------------------------------------------------------------...

POJ 2536 Gopher II 二分图匹配

Gopher II Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8230   Acce...
  • Sci_M3
  • Sci_M3
  • 2016年05月27日 13:59
  • 271

poj 2536 二分图 最大匹配

题意:老鹰抓地鼠,跑不到洞里的就要被吃掉,合理安排最少

【POJ】2536 Gopher II 二分匹配

传送门:【POJ】2536 Gopher II 题目分析:二分匹配模板题 代码如下: #include #include #include #include ...

POJ 2536 Gopher II 二分匹配

有n只地鼠的坐标,m个洞的坐标,地鼠的移动速度为v,在s秒以后会飞来一只老鹰要吃地鼠,问有多少个地鼠可能被吃。 解题思路: 二分图最大匹配。 匹配多了一个条件判断距离而已。。。 ...

UVA 10080 Gopher II【简单二部图最大匹配】

题目大意:给出田鼠数目与地洞数目,每个地洞可以容纳一只田鼠,给出田鼠坐标与地洞坐标,田鼠速度与逃逸最大时间,求出最少被抓住田鼠数。 解题策略:简单二部图,答案 = 田鼠总数-(田鼠——地洞)二部图最...
  • J_Dark
  • J_Dark
  • 2013年04月20日 12:15
  • 1081
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 2536 Gopher II (二分图最大匹配)
举报原因:
原因补充:

(最多只允许输入30个字)