把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

luogu P6628 [省选联考 2020 B 卷] 丁香之路

题面传送门

首先给定你要走的边一定要走,因此我们的目标是最小化走多余的边权。

容易发现如果和 \(y\) 相连有两条边,分别为 \(x\to y,y\to z\),且分别要求走一次,那么这相当于要求从 \(x\to z\)。更一般的,这就是欧拉路问题。

方便起见,将起终点的连边也设定为必须走,这样我们要解决的就是欧拉回路问题。欧拉回路有两个条件:度数和联通。首先考虑度数,我们会发现我们得到了一车度数为奇数的点,这些点需要两两匹配来让度数为偶数,因为边权相当于在数轴上的距离,因此把两个在数轴上最近的点匹配一定不会更劣。

然后解决联通的问题。假设我们得到了一个不连通的解,这个解中有一堆小环,并且这些小环是最优的。那么只需要将小环看成一个点,然后跑最小生成树即可,多出来的边权是最小生成树边权的两倍。

有一个细节卡了挺久,就是解决度数的时候因为 \(i\to j\) 的边肯定不如 \(i\to i+1\to\dots\to j\) 的一车长度为 \(1\) 的边,因此这样子可以更好地让图联通。

时间复杂度 \(O(n^2\log n)\)

submission

posted @ 2023-03-20 15:36  275307894a  阅读(37)  评论(0)    收藏  举报
浏览器标题切换
浏览器标题切换end