POI2014 Rally(拓扑排序)
Description
给定一个N个点M条边的有向无环图,每条边长度都是1。
请找到一个点,使得删掉这个点后剩余的图中的最长路径最短。
\(n,m\le 5\times 10^5\)
Solution
- 令\(S_i\)表示从i结束的最长路,\(T_i\)表示由i出发的最长路
- 这两个数组的预处理可以通过拓扑排序在\(O(n)\)的时间复杂度下解决
- 然后根据拓扑序从小到大扫描一遍,每次删除和i入边有关的最长路,回答询问后,加入与i出边有关的最长路。
- 可以证明这种添加方式不会重复添加。
- 然后再利用线段树或者堆维护一下就可以了