UVA1705题解

题目大意

平面上有 \(n\) 个点,给出第 \(i\) 个点的坐标 \(x_i,y_i\),如果两个点距离不超过 \(d\) 则连一条无向边,求出一个最大团。

数据范围:

\(1 \leqslant n \leqslant 100, 1\leqslant d,|x_i|,|y_i| \leqslant 10000\)

题目分析

我们很容易想到一种方法:随机贪心

就直接 random shuffle 个几百次,然后每次做个贪心,答案就出来了。

但鉴于这种方法太好想,不稳定,且为了让这道题有价值,我们考虑别的方法。

这里分享一种方法:

首先,我们考虑一下它的几何方面有没有什么性质:

我们可以枚举两个点 \(A, B\),则其它点必定在分别以 \(A,B\) 为圆心、半径为
\(d\) 的两个圆的重叠部分内,现在我们要求最大团。

我们建原图的补图,那么问题就转化成了求补图的最大独立集。

(若不了解补图的概念,那么可以参考我的这篇题解,里面讲了补图的概念,大佬跳过...)

然后我们画个图分析一下:

这是以 \(A,B\) 为圆心的两个圆,其它点都在红色部分。

现在我们将 \(AB\) 连起来:

不难发现,补图中所有边的端点都在 \(AB\) 的两侧,如:

那么,我们的补图就转化成了一个二分图,那么也就很好求最大独立集了。

个人认为思路很清晰,就不放代码了。

posted @ 2022-08-07 09:56  Code_AC  阅读(36)  评论(0编辑  收藏  举报