ShinriiTin's Blog - 博主是sb

Run

题意:

给出一张图(点数为n,边数为m)的一个生成树和一些非树边。

每条非树边有一个代价w,表示炸毁这条边需要付出的代价。

求炸毁一些非树边使得图中不存在偶环所付出的最小代价。

特别地,生成树上点的度数不超过10.

数据范围:n<=1000,m<=4000

 

分析:

首先如果一条非树边跨越了树上奇数条边,则这条边必须炸毁。

剩下的边,如果任意两条边所跨越的树上路径有公共边,则会存在偶环。

 

考虑到每个节点的儿子最多只有10个,我们可以考虑状压dp.

令f[x][s]表示以x为根的子树,只考虑集合s中儿子时能保留的边的最大权值。

令g[x][i]表示以x为根的子树,不考虑x的第i个儿子时能保留的边的最大权值。

每条非树边,只在它的端点的lca处考虑影响。

为了让路径不重复,则该非树边所覆盖的路径都不能被选。

暴力从一个端点到lca统计不考虑路径上的边时的最大权值。

再与该非树边没有覆盖的部分一起更新答案。

复杂度O(n*210+n*m)