您的位置:首页 > 其它

洛谷3359改造异或树

2017-04-26 21:56 204 查看
题目

这题大意是说对一棵有边权的树,不断删边,并询问每次删边后有多少条路径上的边权值异或和为0。

记点a到点b的异或和为dist(a,b)

首先,时光倒流,将删边变成加边。

接着,利用x^x=0,任找一个参照物c,将dist(a,b)变成dist(a,c)^dist(b,c)

这样,一次dfs算出所有点到c的距离,维护一个平衡树,不断启发式合并,并更新答案即可。

其实如果追求效率,hash表也是可以的。但为了省事,我用了map。

代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: