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\))
可以使用可删除指定元素堆或权值线段树解决