P7417 [USACO21FEB] Minimizing Edges P

· · 题解

换一种方式来解释这道题的贪心可能更好理解一点。

首先我们得知道新图只与函数 f 的值有关,而由于我们可以在一条边上来回横跳,所以 f 是否有值取决于奇/偶最短路的长度,那么我们用 O(n) BFS 出最短路即可。

注意特判一下每个点只有奇数路径或偶数路径,即这是个二分图,那么直接用原图的最短路树就可以表示了。

否则,每个点都会有奇数和偶数路径,设一个点的奇最短路和偶最短路二元组为 (x,y)

由于顺序并没有关系,且为了好看方便,我们取 x 为奇偶中较短的最短路,y 为较长的,即 x<y

那么考虑导致 (x,y) 的方式:

解释一下:第二个方式中①的第一维保证较小最短路为 x,②第二维保证了较大最短路为 y,而他们的其他维由于与 (x,y) 的点有直接连边故最大都只能 +1

第一种方式只用一条边显然血赚,但可能没有 (x-1,y-1) 的点,此时就只能用第二种方式。

所以才出现了如下的贪心方法:

和其他题解最后的做法都一样,但思路可能会好理解点qwq。

估计没人看的代码

Upd:修改了一点小锅,以前是对的表述就没改了。(虽然读着有点奇怪)