题解 CF757F Team Rocket Rises Again
DAG 上的支配树简单题。以下是前置知识。
最短路图
对于一个带权有向图和起点 \(s\),我们先从起点 \(s\) 跑一遍单源最短路。然后对于每条有向边 \((x,y,z)\),若 \(dis_y=dis_x+z\),那么就在新图上从 \(x\) 向 \(y\) 连边。形成的图就是最短路图。
最短路图的简单性质:
-
从 \(s\) 到任意一点 \(u\) 的任意一条最短路的每一条边一定存在在新图中。除此之外的其他边一定不存在。
-
最短路图是一个 DAG。
DAG 上的支配树
可以求 DAG 上任意一点 \(u\) 删除后,起点 \(s\) 无法到达的点的个数。
具体请参考[ZJOI2012]灾难。
对于这道题,我们发现:删掉点 \(u\) 后到 \(s\) 的最短距离改变的点的数量,等价于在最短路图上删掉点 \(u\) 后 \(s\) 无法到达的数量。
然后我们直接建出最短路图,在上面建支配树求解即可。注意,删除的不能是起点。
我的代码写得比较麻烦,但其实思路还是很清晰的。