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\) 的两侧,如:
那么,我们的补图就转化成了一个二分图,那么也就很好求最大独立集了。
个人认为思路很清晰,就不放代码了。