csp-s模拟102

T1:
  考虑肯定要断环成链,但从什么地方断较好?
  发现如果从最大值断开的话,前面的都不会跨过边界(好!)
  那么我们就可以做一个类似音乐会的等待的东西就行了

  当然还需要一些特判:如果一个数它是后缀max而不是前缀max,那么它和最大值就会有一个贡献且之前还没有算到,加上就好了
 
T2:
  有一个很好理解的强悍做法:@DeepinC
 
T3:
  枚举删某个点的复杂度肯定是去不掉的,考虑如何优化计算删一个点答案的复杂度

  发现最暴力的每次删掉一个点重跑一遍有很多冗余
  考虑可以先预处理出从某个开始点到任意点i的最长路\(f_i\),任意点i到某个结束点的最长路\(g_i\)

  考虑按照拓扑序枚举删除的点y
  开始时将所有\(g_i\)加入数据结构
  每次先将所有连向该点的边(x,y)产生的最长路\(f_x+dis_{x,y}+g_y\)删除(同时需要删除\(g_y\))
  再将所有该点连出的边(y,z)产生的最长路\(f_y+dis_{y,z}+g_z\)加入(同时需要加入\(f_y\)

  可以使用可删除指定元素堆或权值线段树解决

posted @ 2019-11-12 15:25  G_keng  阅读(118)  评论(0编辑  收藏  举报