bzoj3832

题意

(n)(m)条边的DAG,求删除一点后最长路径的最小值。

做法

(f_i)为以(i)结束的最长路径,(g_i)为以(i)出发的最长路径
用权值线段树维护这样一个集合:

  • 可重
  • 删除一个元素,若不存在这个元素则对集合没有影响

令拓扑序为(a_i),初始将(g_i)加入集合(S)
顺序遍历拓扑序(x=a_i)

  • (f_u+g_x+1((u,x)in E))(S)删除,将(g_x)(S)删除
  • 查询集合最大值更新答案
  • (f_x+g_v+1((x,v)in E))(S)加入

正确性:
不经过该点的路径存在于(S)
经过该点的路径不存在于(S):这条路径(x)前面每个点的贡献都被删掉了,后面的点只存在(g_i)的贡献

原文地址:https://www.cnblogs.com/Grice/p/12626744.html