背景:
原题链接
这次八级有史以来最简单(可惜我没考)。
我这次考七级,下次八级,这次八级简单就代表下次超难,qwq。
此外,建议此题升黄(不过不升也无所谓),毕竟最小生成树模板题难度也有黄。(反正ACGO也是摘用洛谷的,这里直接放洛谷的题目)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
思路:
> KruskalKruskalKruskal板子题,就把边稍微处理一下就行。用pairpairpair储存每个点的xxx和yyy坐标,根据欧几里得距离计算公式(xi−xj)2+(yi−yj)2\sqrt{(x_i - x_j)^2 + (y_i - y_j)^2}(xi −xj )2+(yi −yj )2 ,把每两个点的边的距离都遍历表示一遍,如果不大于lll,就放入边的数组,最后按最小生成树模板写完即可。
> 其实这题用PrimPrimPrim算法(加点法)效率比KruskalKruskalKruskal(加边法)更高,毕竟点只有nnn个,但最坏情况边有n(n−1)2\frac{n(n-1)}{2}2n(n−1) 条,时间复杂度O(n2logO(n^2 logO(n2log n)n)n),显然没有PrimPrimPrim算法O(n2)O(n^2)O(n2)的时间复杂度效率高。
> 那为什么我不用PrimPrimPrim算法呢?因为我不会,而且KruskalKruskalKruskal更简洁、易懂,还有本题数据水效率也不会差太多。
练习最小生成树相关内容请看这里。
最小生成树原理
Prim代码
Kruskal代码
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
数据范围:
ACGO也是一如既往的没有数据范围,这里提供详细的数据范围(我找的都是洛谷上的)。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
代码:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
结语:
希望对大家学习OI有帮助!