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