P3119 [USACO15JAN]Grass Cownoisseur G 题解

做过的原题,模拟赛时 PDF 里的题面实在有点难受。

首先有显然结论:在一个环上反走一定是不值的,因为环上的点本来就相互可达。

所以考虑缩点。缩点后的问题可以看成:求对于每一个点 \(x\),遍历所有能到达他的点 \(from\),求 \(1\)\(x\) 的最长路以及 \(from\)\(1\) 的最长路的和,减去 \(1\) 所在 SCC 的体积(因为被算了两次,去一次,回来一次)的最小值。

对于缩点后的图建立正图与反图,分别处理最短路。问题解决。

这里再提供一下公式化的描述:设正图最短路数组为 \(dis1\),反图最短路数组为 \(dis2\),对于每个点能到达他的点存储在数组 \(from\) 中,大小统一写为 \(siz\)\(1\) 点连通块的体积为 \(S\)

答案即为:

\[\max\limits_{i=1}^n(dis1_i + \max\limits_{j=1}^{siz} dis2_j-S) \]

posted @ 2023-02-03 22:00  Aurora_Borealis  阅读(26)  评论(0编辑  收藏  举报