严格次小生成树

码力+树论

我用的树链剖分版。有一个结论需要记住:一个严格次小生成树只与最小生成树的一条边不同,我们考虑枚举每一条没有加入到最小生成树中的边,如果将其加入,能够影响到边的两个端点的lca(整个区域将变为一个环),所以我们要删除一条最大的边,如果最大的边与其相等,那么删除一条次大的边。以此类推,最后求出一个对原答案影响最小的增加量。

线段树可以维护区间最大,次大值,方法就是每次查询返回一个结构体,存最大和次大,那么合并答案:

 t[s].mx=max(t[t[s].lc].mx,t[t[s].rc].mx);
 t[s].sec=max(min(t[t[s].lc].mx,t[t[s].rc].mx),max(t[t[s].lc].sec,t[t[s].rc].sec));

code:我的才80分,还没调整好!

收获:

次小生成树类问题一定要:1、记结论
2、将生成树建立出来,通过边的影响来求出答案,方法有倍增法和树链剖分法(LCT不会qwq)

posted @ 2018-09-25 19:36  Splitor  阅读(183)  评论(0编辑  收藏  举报