题目链接:

http://bjutacm.openjudge.cn/lianxi/1101/

思路:

二分 + 二分图最大匹配。

开始的时候我想直接用最小费用流模型,后来发现这样是错误的。因为这道题实际上是求一个匹配数>=n的匹配,并且满足在这个匹配中匹配边的最大的权值最小;而不是使所有匹配边的权值之和最小。这样看来就是一个典型的二分思路。首先对权值排序,每次选中原图中那些权值不能超过x的边,用这些边构建二分图。再用匈牙利算法check一下这个二分图的最大匹配数是否>=n。二分一下满足这样的条件下对应的最小的那个边权值x即可。

实现:

 #include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std; const int MAXN = ;
int n, m;
double v, dis[MAXN + ][MAXN + ], edges[MAXN * MAXN + ];
vector<int> G[MAXN + ];
bool used[MAXN + ];
int match[MAXN + ]; struct point
{
int x, y;
};
point man[MAXN / + ], car[MAXN / + ]; bool dfs(int v)
{
used[v] = true;
for (int i = ; i < G[v].size(); i++)
{
int u = G[v][i];
int w = match[u];
if (w == - || !used[w] && dfs(w))
{
match[v] = u;
match[u] = v;
return true;
}
}
return false;
} int max_match()
{
int res = ;
for (int i = ; i <= n + m; i++)
{
if (match[i] == -)
{
memset(used, , sizeof(used));
if (dfs(i))
res++;
}
}
return res;
} bool check(double len)
{
for (int i = ; i <= n + m; i++)
match[i] = -;
memset(used, , sizeof(used));
for (int i = ; i <= n + m; i++)
G[i].clear();
for (int i = ; i < n; i++)
{
for (int j = ; j < m; j++)
{
if (dis[i][j] <= len)
{
G[i + ].push_back(j + n + );
G[j + n + ].push_back(i + );
}
}
}
return max_match() >= n;
} int square(int x)
{
return x * x;
} double cal_cost(int i, int j)
{
return sqrt(square(man[i].x - car[j].x) + square(man[i].y - car[j].y));
} int main()
{
while (cin >> n >> m)
{
for (int i = ; i < n; i++)
{
cin >> man[i].x >> man[i].y;
}
for (int i = ; i < m; i++)
{
cin >> car[i].x >> car[i].y;
}
cin >> v;
int cnt = ;
for (int i = ; i < n; i++)
{
for (int j = ; j < m; j++)
{
edges[cnt++] = dis[i][j] = cal_cost(i, j);
}
}
sort(edges, edges + cnt);
int l = , r = cnt - , res = cnt - ;
while (l <= r)
{
int mid = l + r >> ;
if (check(edges[mid]))
{
res = mid;
r = mid - ;
}
else
{
l = mid + ;
}
}
printf("%.2lf\n", edges[res] / v);
}
return ;
}

北工大2017校赛 1101:要打车的FanZzz的更多相关文章

  1. 2017校赛 问题 F: 懒人得多动脑

    题目描述 小D的家A和学校B都恰好在以点F为焦点的双曲线上,而小D每日所需的生活水源在一条平行该双曲线准线的直线上,设它的值为v.大家都知道,每天都是要喝水的,但是小D有点懒,他希望自己能在去上学或者 ...

  2. 内工大acm校赛--整理代码

    题目:小明搜到一行无缩进无换行代码,请帮小明整理代码.无for语句和case语句,而且只有一个主函数.你只要控制注意“:”“{”“}”这三个符号带来的缩进和换行效果就行. Input: 输入只有一行, ...

  3. 广工2017校赛-F-- tmk找三角

    http://gdutcode.sinaapp.com/problem.php?cid=1056&pid=5 Description 有一棵树,树上有只tmk.他在这棵树上生活了很久,对他的构 ...

  4. 2017 校赛 问题 B: CZJ-Superman

    题目描述 “那是只鸟?那是飞机?那是——超人!” 程序员在看完<CZJ-Superman>之后,励志要成为一名“CZJ-Superman”,学会了两个特殊技能ZZZ和JJJ,足以成为一名“ ...

  5. 2017校赛 问题 D: 我知道了,你知道了吗?【递归】

    题目描述 Alice和Bob走在去学校的路上,听到两个路人的对话: 路人甲:我知道了, 你知道了吗? 路人乙:我知道你知道了,你知道了吗? 路人甲:我知道你知道我知道了,你知道了吗? 路人乙:我知道你 ...

  6. 2017 校赛 问题 E: 神奇的序列

    题目描述        Aurora在南宁发现了一个神奇的序列,即对于该序列的任意相邻两数之和都不是三的倍数.现在给你一个长度为n的整数序列,让你判断是否能够通过重新排列序列里的数字使得该序列变成一个 ...

  7. 2017校赛 C: 不爱学习的小W【模拟】

    题目描述 “叮铃铃”上课了,同学们都及时到了教室坐到了座位上,教室里有n行m列的座位而且刚好坐满.既然是上课,那老师叫学生回答问题就是再正常不过的事了,同样地,教室里也就有爱学习和不爱学习的学生了,爱 ...

  8. 2014哈商大ICPC/ACM校赛解题报告

    被debug邀请去參加校赛,哎,被虐..我对不起工大.. 由于本人不搞ACM,算法处于HelloWorld水准.. 虽然题目除了鸟不拉屎星人之外都非常水,但我能做到这个程度,全然是超水平发挥了.. 数 ...

  9. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

随机推荐

  1. 【nginx】【转】正向代理与反向代理的区别[

    转自: http://blog.csdn.net/m13666368773/article/details/8060481 正向代理的概念 正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单 ...

  2. Struts2.3动态调用报 No result defined for action 错误

    struts 2.3.16  採用动态调用发现不工作报404 not found,网上查找原因: 1.由于:struts2中默认不同意使用DMI 所以:须要在配置文件里打开: <constant ...

  3. 工作总结 string数组 排序 string数组 比较

    用到   工具类 Array 创建.处理.搜索数组并对数组进行排序 Enumerable  提供一组用于查询实现 System.Collections.Generic.IEnumerable<T ...

  4. AutoreleasePool 分析

    前言 AutoreleasePool自己主动释放池,对于自己主动释放对象的作用怎样? 释放池中的自己主动释放对象什么时候会被释放? MRC环境下 场景1 NSString *string_var_ = ...

  5. hiho一下 第五十一周(有向图欧拉路径)51

    //////////////////////////////////////////////////////////////////////////////////////////////////// ...

  6. Ajax使用JSON数据格式

    1: •JSON(JavaScriptObject  Notation)一种简单的数据格式,比xml更轻巧.JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不须 ...

  7. 基于OAS设计可扩展OpenAPI

    前言 随着互联网行业的兴起,开发模式已逐步转换为微服务自治:小团队开发微服务,然后通过Restful接口相互调用.开发者们越来越渴望能够使用一种“官话”进行流畅的沟通,甚至实现多种编程语言系统的自动化 ...

  8. 解决myeclipse在mac中Retina屏幕中模糊的终极详细方法

  9. swift中使用GCDMulticastDelegate

    在开源库XMPPFramework中提供了一个GCDMulticastDelegate类,使用它可以为一个对象添加多个被委托的对象,以前用oc编写的工程引入了这个类,使用起来十分方便.最近由于换了工作 ...

  10. 杂项:game_navigation

    ylbtech-杂项:game_navigation 1.返回顶部 1. 2. 2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处: ...