POJ2536 Gopher II【二分图最大匹配】
题目链接:
id=2536
题目大意:
有N仅仅鼹鼠和M个洞穴,假设鼹鼠在S秒内不可以跑到洞穴,就会被老鹰捉住吃掉。
鼹鼠跑的速度为V米/秒。
已知一个洞穴仅仅能容纳一仅仅鼹鼠。给你鼹鼠和洞穴的坐标,那么问题来了:问最少有多少仅仅鼹鼠被老鹰捉住
吃掉。
思路:
建立一个二分图,一边为鼹鼠,还有一边为洞穴枚举求出每仅仅鼹鼠到各个洞穴的距离,把可以在S秒内跑到该
洞穴(距离<=S*V)的进行连边。建好图后用匈牙利算法求出最多有多少仅仅鼹鼠可以幸免于难( MaxMatch() ),
那么剩下的N - MaxMatch()就是最少有多少仅仅鼹鼠被老鹰捉住吃掉。
AC代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std; int N,M,S,V; struct Node
{
double x;
double y;
}PA[330],PB[330]; int Map[330][330];
bool Mask[330];
int cx[330],cy[330]; int FindPath(int u)
{
for(int i = 1; i <= M; ++i)
{
if(Map[u][i] && !Mask[i])
{
Mask[i] = 1;
if(cy[i] == -1 || FindPath(cy[i]))
{
cy[i] = u;
cx[u] = i;
return 1;
}
}
}
return 0;
} int MaxMatch()
{
int res = 0;
for(int i = 1; i <= N; ++i)
cx[i] = -1;
for(int i = 1; i <= M; ++i)
cy[i] = -1; for(int i = 1; i <= N; ++i)
{
if(cx[i] == -1)
{
for(int j = 1; j <= M; ++j)
Mask[j] = 0;
res += FindPath(i);
}
}
return res;
} int main()
{
while(~scanf("%d%d%d%d",&N,&M,&S,&V))
{
for(int i = 1; i <= N; ++i)
scanf("%lf%lf",&PA[i].x,&PA[i].y);
for(int i = 1; i <= M; ++i)
scanf("%lf%lf",&PB[i].x,&PB[i].y); memset(Map,0,sizeof(Map));
for(int i = 1; i <= N; ++i)
{
for(int j = 1; j <= M; ++j)
{
double x = PA[i].x - PB[j].x;
double y = PA[i].y - PB[j].y;
if(x*x+y*y <= S*V*S*V)
Map[i][j] = 1;
}
}
printf("%d\n",N-MaxMatch());
} return 0;
}
POJ2536 Gopher II【二分图最大匹配】的更多相关文章
- POJ2536 Gopher II(二分图最大匹配)
		Gopher II Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9005 Accepted: 3724 Descrip ... 
- 2018.07.06 POJ2536 Gopher II(二分图匹配)
		Gopher II Time Limit: 2000MS Memory Limit: 65536K Description The gopher family, having averted the ... 
- 无题 II 二分图最大匹配
		题目描述 这是一个简单的游戏,在一个n*n的矩阵中,找n个数使得这n个数都在不同的行和列里并且要求这n个数中的最大值和最小值的差值最小. Input 输入一个整数T表示T组数据. 对于每组数据第一行输 ... 
- POJ 2536 之 Gopher II(二分图最大匹配)
		Gopher II Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6675 Accepted: 2732 Descrip ... 
- 二分图最大匹配(匈牙利算法) UVA 10080 Gopher II
		题目传送门 /* 匈牙利算法:这题比UVA_670简单,注意是要被吃的鼠的最少个数,套模板 */ #include <cstdio> #include <algorithm> ... 
- POJ 2536 Gopher II(二分图最大匹配)
		题意: N只地鼠M个洞,每只地鼠.每个洞都有一个坐标. 每只地鼠速度一样,对于每只地鼠而言,如果它跑到某一个洞的所花的时间小于等于S,它才不会被老鹰吃掉. 规定每个洞最多只能藏一只地鼠. 问最少有多少 ... 
- POJ2536(二分图最大匹配)
		Gopher II Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8504 Accepted: 3515 Descrip ... 
- POJ 2226二分图最大匹配
		匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是二部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图 ... 
- POJ2239 Selecting Courses(二分图最大匹配)
		题目链接 N节课,每节课在一个星期中的某一节,求最多能选几节课 好吧,想了半天没想出来,最后看了题解是二分图最大匹配,好弱 建图: 每节课 与 时间有一条边 #include <iostream ... 
随机推荐
- Access数据库 INSERT INTO 失败
			一次操作Access数据库,插入一条数据,总是失败,如下: 通过赋值,一个字段一个字段的排查,最终确定是UserAge字段处有问题. 最初,UserAge字段是 %d 类型的,赋值20,可成功插入数据 ... 
- 【原创】Linux环境下的图形系统和AMD R600显卡编程(8)——AMD显卡DRM驱动初始化过程
			前面几个blog对DRM驱动.显卡的显存管理机制.中断机制都进行了一些描述,现在阅读AMD drm驱动的初始化过程应该会轻松许多. 下面是一AMD的开发人员编写的文章(先暂时放在这里,后续有时间再添加 ... 
- OpenStack基础概念
			openstack 组件介绍 1.horizon -- UI模块 为云管理提供整体视图,以实现资源整合和管理配额 为终端用户提供自动服务门户,在自由范围内自由操作,使用资源 2.keystone -- ... 
- 多线程之:竞态条件&临界区
			竞态条件指:当一个对象或者一个不同步的共享状态,被两个或者两个以上的线程修改时,对访问顺序敏感,则会产生竞态条件. 临界区指:导致竞态条件发生的代码区. 如:increase块为临界区 public ... 
- 【转】Talend作业设计模式和最佳实践-Part I
			原文地址:https://mp.weixin.qq.com/s?__biz=MzA3OTg1Mzk4Nw==&mid=2453261363&idx=2&sn=e0f426022 ... 
- 腾讯微信支付,程序员是如何让jQuery代码付钱的
			微信支付和支付宝支付已经是我们生活中不可确实的两个金融软件了,也是必备的,小编认为小钱用微信,大钱用支付宝. 下面这个图是我们生活中用腾讯微信支付平台的最后一个页面,大家想不想知道这个页面是如果做出来 ... 
- [thinkphp] APP_DEBUG开启之后session不稳定
			有时候在一个方法中写入了session, 在另一个方法中打印却什么都没有. 我这次的情况是网页上通过ajax传值到一个php函数,然后php把值写入session中.然后我在另一个php方法中打印se ... 
- spoj - Distinct Substrings(后缀数组)
			Distinct Substrings 题意 求一个字符串有多少个不同的子串. 分析 又一次体现了后缀数组的强大. 因为对于任意子串,一定是这个字符串的某个后缀的前缀. 我们直接去遍历排好序后的后缀字 ... 
- 「Codeforces Round #441」 Classroom Watch
			Discription Eighth-grader Vova is on duty today in the class. After classes, he went into the office ... 
- zlib stream
			官方帮助手册 http://www.zlib.net/manual.html #include <stdlib.h> #include <string.h> #incl ... 
