T1 用一个堆从后向前扫。 依次用正数抵消负数。 最后相当于把(b_i)作为(a)的首位。 这样的话直接用一个前缀和+二分来统计答案就可以了。
T2 我们把颜色从大到小加入。 然后判断当前是否在同一个连通块。 如果是再判断是否大于(K),小于等于就直接更新答案。 否则查看是否有办法缩减为一个集合,并且个数小于(K).
T3 动态维护这些关键点。 (dfs)序相邻的点统计一下距离。 然后直径可以直接用线段树分治来搞。 这样答案就是边权值和-直径。