博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ2663 [Beijing wc2012]灵魂宝石
阅读量:5905 次
发布时间:2019-06-19

本文共 1701 字,大约阅读时间需要 5 分钟。

Description

平面中有\(n\)个黑点和\(n\)个白点。这些点组成\(n\)对,但是你不知道它们的对应关系。若某队中黑点白点距离\(<R\),则它是好的;\(>R\)则不是好的;\(=R\)的时候可好可不好。已知有\(k\)对是好的,求\(R\)的最大值和最小值。

Solution

首先解决对称的问题:给定\(R\),求\(k\)的最大值和最小值。

\(k\)的最大值可以二分图匹配:所有\(\leqslant R\)的可以构成一对。

求最小值同样可以二分图匹配:所有\(\geqslant R\)的可以构成一对(不好的一对);令不好的尽量多即可。

可以发现当\(R\)增大时\(k_{max}\)\(k_{min}\)都是不减的。所以二分\(R\)即可。

Code

#include 
#include
#include
#include
const int N = 55;int X[N], Y[N], x[N], y[N];int n, K, R;inline int sqr(int x) { return x * x; }bool check(int i, int j, bool max) { int l = sqr(X[i] - x[j]) + sqr(Y[i] - y[j]); return max ? l >= R : l <= R;}int my[N];bool vis[N];bool dfs(int x, bool max) { for (int y = 1; y <= n; ++y) if (!vis[y]) { bool l = check(x, y, max); if (!l) continue; vis[y] = true; if (!my[y] || dfs(my[y], max)) { my[y] = x; return true; } } return false;}bool check(int mid, bool max) { R = mid; memset(my, 0, sizeof my); int ans = 0; for (int x = 1; x <= n; ++x) { memset(vis, 0, sizeof vis); if (dfs(x, max)) ++ans; } return max ? n - ans <= K : ans >= K;}int main() { scanf("%d%d", &n, &K); for (int i = 1; i <= n; ++i) scanf("%d%d", &X[i], &Y[i]); for (int i = 1; i <= n; ++i) scanf("%d%d", &x[i], &y[i]); int l = 0, r = 10000000; while (l < r) { int mid = (l + r) / 2; if (check(mid, false)) r = mid; else l = mid + 1; } printf("%.2lf ", sqrt(l)); if (K == n) { puts("+INF"); return 0; } l = 0, r = 10000000; while (l < r) { int mid = r + (l - r) / 2; if (check(mid, true)) l = mid; else r = mid - 1; } printf("%.2lf\n", sqrt(l)); return 0;}

转载于:https://www.cnblogs.com/y-clever/p/8512284.html

你可能感兴趣的文章
服务器创建好后怎样使用远程连接工具链接的一些问题
查看>>
插件~NuGet与packages管理项目的包包
查看>>
笔试算法题(34):从数字序列中寻找仅出现一次的数字 & 最大公约数(GCD)问题...
查看>>
Python基础知识之大杂烩
查看>>
china-pub登录问题
查看>>
为什么express中打开服务端只用listen即可
查看>>
ethereumjs/ethereumjs-block-1-简介
查看>>
Comparing Your Heros拓扑序列的数量
查看>>
A Simple Problem with Integers poj 3468 多树状数组解决区间修改问题。
查看>>
shell脚本编程的10个最佳实践
查看>>
【Linux】压缩命令
查看>>
.net程序员写业务代码需要注意的地方
查看>>
Velocity基本语法
查看>>
块级元素在不确定宽度情况如何使其居中
查看>>
xhtml element
查看>>
同步、异步、多线程与事件型综述
查看>>
background url base64
查看>>
学习总结
查看>>
Elasticsearch2.x 使用Groovy脚本
查看>>
关于iframe页面高度自适应的问题
查看>>