poj 2536 Gopher II (二分匹配)

Gopher II










Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 6345   Accepted: 2599

Description

The gopher family, having averted the canine
threat, must face a new predator. 

The are n gophers and m gopher
holes, each at distinct (x, y) coordinates. A hawk arrives and if a gopher does
not reach a hole in s seconds it is vulnerable to being eaten. A hole can save
at most one gopher. All the gophers run at the same velocity v. The gopher
family needs an escape strategy that minimizes the number of vulnerable
gophers.

Input

The input contains several cases. The first line
of each case contains four positive integers less than 100: n, m, s, and v. The
next n lines give the coordinates of the gophers; the following m lines give the
coordinates of the gopher holes. All distances are in metres; all times are in
seconds; all velocities are in metres per second.

Output

Output consists of a single line for each case,
giving the number of vulnerable gophers.

Sample Input

2 2 5 10
1.0 1.0
2.0 2.0
100.0 100.0
20.0 20.0

Sample Output

1

Source

Waterloo
local 2001.01.27

最大独立集:


 1 //200K    47MS    C++    1200B    2014-06-10 07:43:56
2 #include<stdio.h>
3 #include<string.h>
4 #include<math.h>
5 #define N 105
6 struct node{
7 double x,y;
8 }gopher[N],hole[N];
9 int g[N][N];
10 int match[N];
11 int vis[N];
12 int n,m;
13 double dist(node a,node b)
14 {
15 return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
16 }
17 int dfs(int u)
18 {
19 for(int i=0;i<m;i++)
20 if(!vis[i] && g[u][i]){
21 vis[i]=1;
22 if(match[i]==-1 || dfs(match[i])){
23 match[i]=u;
24 return 1;
25 }
26 }
27 return 0;
28 }
29 int hungary()
30 {
31 int ret=0;
32 memset(match,-1,sizeof(match));
33 for(int i=0;i<n;i++){
34 memset(vis,0,sizeof(vis));
35 ret+=dfs(i);
36 }
37 return ret;
38 }
39 int main(void)
40 {
41 double s,v;
42 while(scanf("%d%d%lf%lf",&n,&m,&s,&v)!=EOF)
43 {
44 for(int i=0;i<n;i++)
45 scanf("%lf%lf",&gopher[i].x,&gopher[i].y);
46 for(int i=0;i<m;i++)
47 scanf("%lf%lf",&hole[i].x,&hole[i].y);
48 memset(g,0,sizeof(g));
49 for(int i=0;i<n;i++)
50 for(int j=0;j<m;j++)
51 if(dist(gopher[i],hole[j])/v<s)
52 g[i][j]=1;
53 printf("%d\n",n-hungary());
54 }
55 return 0;
56 }

时间: 2024-10-06 21:36:29

poj 2536 Gopher II (二分匹配)的相关文章

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

题目链接:http://poj.org/problem?id=2536 题意:已知有n只老鼠的坐标,m个洞的坐标,老鼠的移动速度为V,S秒以后有一只老鹰要吃老鼠,问有多少个老鼠被吃. 很明晰,二分匹配,老鼠为X集合,洞为Y集合 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <m

POJ 2536 Gopher II

二分图的最大匹配 地鼠内部和地鼠洞内部都是没有边相连的,那么就可以看成一个二分图.地鼠如果可以跑到那个地鼠洞,就连一条边,然后跑二分图的最大匹配,最后地鼠的数量减去最大匹配数就是答案. #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int MAXN=505; int nx,ny; int g[MAXN][MAX

POJ - 2536 Gopher II 二分图 最大匹配

题目大意:有n只老鼠,m个洞,一个洞只能藏一只老鼠. 有一群鹰来了,老鼠们要赶紧躲到洞里才不会被抓走. 现在给出每只老鼠的坐标,每个洞的坐标,老鼠的速度,和鹰捉到老鼠的时间,问鹰最少能抓到几只老鼠 解题思路:求出每只老鼠和每个洞之间的距离,然后除于老鼠的速度,看在鹰捉到老鼠的时间内能否跑到该洞中. 然后将老鼠和洞分成两个点集,进行二分图的最大匹配,然后n-最大匹配就是鹰至少能抓到的老鼠的数量了 #include<cstdio> #include<cstring> #include&

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

题意: N只地鼠M个洞,每只地鼠.每个洞都有一个坐标. 每只地鼠速度一样,对于每只地鼠而言,如果它跑到某一个洞的所花的时间小于等于S,它才不会被老鹰吃掉. 规定每个洞最多只能藏一只地鼠. 问最少有多少只地鼠会命丧鹰口. 思路: 直接建图.二分图最大匹配. 代码: char st[105]; char Range[25][5]; int n; int num[10]; int cx[25],cy[205]; bool bmask[205]; vector<int> graph[25]; int

poj 1422 Air Raid (二分匹配)

Air Raid Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6520   Accepted: 3877 Description Consider a town where all the streets are one-way and each street leads from one intersection to another. It is also known that starting from an i

poj 2594 Treasure Exploration (二分匹配)

Treasure Exploration Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 6558   Accepted: 2644 Description Have you ever read any book about treasure exploration? Have you ever see any film about treasure exploration? Have you ever explored

poj 2584 T-Shirt Gumbo (二分匹配)

T-Shirt Gumbo Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2571   Accepted: 1202 Description Boudreaux and Thibodeaux are student volunteers for this year's ACM South Central Region's programming contest. One of their duties is to dis

UPCOJ2985 Gopher(二分匹配)

这道题是我们弱校大一校赛的防AK题... 当时不到1个半小时做完其他题就一直在看他 然而当时并没有学二分匹配 然后就各种结构体sort... 整了3个多小时还是败了 于是学习了一下,这就很简单了 题意就是给你n个老鼠m个洞,并给你坐标和老鼠的速度和最晚时间 通过这些距离算出每个老鼠对于每个洞能否在规定时间内进去.. 然后就...好了 /* *********************************************** Author :devil Created Time :201

POJ 1469(裸二分匹配)

COURSES Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18993   Accepted: 7486 Description Consider a group of N students and P courses. Each student visits zero, one or more than one courses. Your task is to determine whether it is poss