二分图匹配(匈牙利算法) UVA 10080 Gopher II

题目传送门

 1 /*
 2     匈牙利算法:这题比UVA_670简单,注意是要被吃的鼠的最少个数,套模板
 3 */
 4 #include <cstdio>
 5 #include <algorithm>
 6 #include <cstring>
 7 #include <cmath>
 8 #include <vector>
 9 using namespace std;
10
11 const int MAXN = 1e2 + 10;
12 const int INF = 0x3f3f3f3f;
13 struct P
14 {
15     double x, y;
16 }a[MAXN], b[MAXN];
17 bool vis[MAXN];
18 int lk[MAXN];
19 vector<int> G[MAXN];
20
21 double get_dis(double x1, double y1, double x2, double y2)
22 {
23     return sqrt ((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2));
24 }
25
26 bool DFS(int u)
27 {
28     for (int i=0; i<G[u].size (); ++i)
29     {
30         int v = G[u][i];
31         if (!vis[v])
32         {
33             vis[v] = true;
34             if (lk[v] == -1 || DFS (lk[v]))
35             {
36                 lk[v] = u;    return true;
37             }
38         }
39     }
40
41     return false;
42 }
43
44 int hungary(int n)
45 {
46     int res = 0;    memset (lk, -1, sizeof (lk));
47     for (int i=1; i<=n; ++i)
48     {
49         memset (vis, false, sizeof (vis));
50         if (DFS (i))    res++;
51     }
52
53     return res;
54 }
55
56 int main(void)        //UVA 10080 Gopher II
57 {
58 //    freopen ("UVA_10080.in", "r", stdin);
59
60     int n, m, s, v;
61     while (scanf ("%d%d%d%d", &n, &m, &s, &v) == 4)
62     {
63         for (int i=1; i<=n; ++i)    scanf ("%lf%lf", &a[i].x, &a[i].y);
64         for (int i=1; i<=m; ++i)    scanf ("%lf%lf", &b[i].x, &b[i].y);
65         for (int i=1; i<=n; ++i)    G[i].clear ();
66         for (int i=1; i<=n; ++i)
67         {
68             for (int j=1; j<=m; ++j)
69             {
70                 if (get_dis (a[i].x, a[i].y, b[j].x, b[j].y) <= s * v)    G[i].push_back (j);
71             }
72         }
73
74         printf ("%d\n", n - hungary (n));
75     }
76
77     return 0;
78 }
时间: 2024-12-04 20:40:48

二分图匹配(匈牙利算法) UVA 10080 Gopher II的相关文章

二分图匹配(匈牙利算法) UVA 670 The dog task

题目传送门 1 /* 2 题意:bob按照指定顺序行走,他的狗可以在他到达下一个点之前到一个景点并及时返回,问狗最多能走多少个景点 3 匈牙利算法:按照狗能否顺利到一个景点分为两个集合,套个模板 4 */ 5 #include <cstdio> 6 #include <algorithm> 7 #include <cstring> 8 #include <cmath> 9 #include <vector> 10 using namespace

USACO 4.2 The Perfect Stall(二分图匹配匈牙利算法)

The Perfect StallHal Burch Farmer John completed his new barn just last week, complete with all the latest milking technology. Unfortunately, due to engineering problems, all the stalls in the new barn are different. For the first week, Farmer John r

HDU 5943 Kingdom of Obsession 【二分图匹配 匈牙利算法】 (2016年中国大学生程序设计竞赛(杭州))

Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 49    Accepted Submission(s): 14 Problem Description There is a kindom of obsession, so people in this kingdom do things very

HDU1507 Uncle Tom&#39;s Inherited Land* 二分图匹配 匈牙利算法 黑白染色

原文链接http://www.cnblogs.com/zhouzhendong/p/8254062.html 题目传送门 - HDU1507 题意概括 有一个n*m的棋盘,有些点是废的. 现在让你用1*2的矩形覆盖所有的不废的点,并且不重叠,问最多可以覆盖多少个1*2的矩形,输出方案,有SPJ. 输入描述: 多组数据,每组首先两个数n,m(如果n和m为0,则结束程序) 然后给出k 然后给出k个二元组(x,y)表示废点的坐标. 题解 按照前两片博文的算法已经不行了,因为方案不对了. 所以我们要进行

矩阵游戏|ZJOI2007|BZOJ1059|codevs1433|luoguP1129|二分图匹配|匈牙利算法|Elena

1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MB Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个N *N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作:行交换操作:选择 矩阵的任意两行,交换这两行(即交换对应格子的颜色)列交换操作:选择矩阵的任意行列,交换这两列(即交换 对应格子的颜色)游戏的目标,即通过若干次操作,

网络流24题 第一题 - 洛谷2756 飞行员配对方案 二分图匹配 匈牙利算法

欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 题意概括 裸的二分图匹配 题解 匈牙利算法 上板子 代码 #include <cstring> #include <cstdio> #include <algorithm> #include <cstdlib> #include <cmath> using namespace std; const int N=100+5; int m,n,a,b,match[N

图论-二分图匹配-匈牙利算法

有关概念: 二分图:图G中的点集可以分为两个互不相交的子集,且G中的每条边连接的两个点分别属于这两个子集 二分图匹配:二分图G的子图M中每个结点上只连一条边,则称M为一个匹配 极大匹配:无法再向二分图中加边且满足匹配条件的匹配 最大匹配:所有极大匹配中边数最多的一个 增广路:若P为图G上连接两个未匹配结点的路径,且已匹配边和未匹配边在P上交替出现,则称P为相对于M的一条增广路 匈牙利算法即用来求二分图的极大匹配 思路: 在图G中找出增广路P,对P上每一条边取反(即已匹配边改为未匹配边,未匹配边改

BZOJ 1191 [HNOI2006]超级英雄Hero:二分图匹配 匈牙利算法

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1191 题意: 有m道题,每答对一题才能接着回答下一个问题. 你一道题都不会,但是你有n个"锦囊妙计"(每个只能用一次). 对于每道题,你只能用该题规定的两种锦囊中的一种,来解决这道题. 问你最多能解决多少道题. 题解: 二分图最大匹配. 匈牙利算法. 问题与锦囊匹配. 最大匹配即为最多回答数. 但是题目中要求题目必须连续回答,不能中断. 所以在给每一个问题配对时,一旦匹配不上,

#图# #二分图匹配# #匈牙利算法#

二分图 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图. 区别二分图,关键是看点集是否能分成两个独立的点集. 二分图匹配(匈牙利算法) 最大匹配:设 是一个无向图.如顶点集V可分割为两个互不相交的子集 ,选择这样的子集中边数最大的子集称为图的最大匹配问题(maximal matching problem). 完全匹配:如果一个匹配中,  且