C. 【UNR #3】配对树

题解:


首先可以贪心 于是问题可以等价成一条边被算当且仅当子树中个数为奇数个

题解的做法比较简单

考虑每条边,加入其子树内的点

然后为了保证区间长度为偶数

分成f0,0 f0,1 f1,0 f1,1即可

暴力插入复杂度不对改成启发式合并即可

这里插入的时候可用线段树维护 把x-n这一段翻转即可

这样是两个log

一般可以用线段树合并优化启发式合并

但是这里改成线段树合并的话要换一种维护方式

我们维护左儿子ddl的个数来决定右儿子中的信息是直接加还是需要翻转

这样就可以线段树合并了

复杂度一个log

 

另外我开始想了一个2个log的做法

为了保证区间长度为偶数 我们分成从奇数还是偶数开始两种情况,之后把两个看成一组

于是我们现在要维护的就是,到当前考虑的序列的点

树上的每个点,其子树内有偶数个点的方案数、奇数个点的方案数

然后观察插入两个点的时候

当且仅当这个点在两个点的路径上(除lca) 增加了奇数个点,其余都是增加偶数个点

取出两点路径可以利用树链剖分

然后要支持两种操作 1.偶数=原本奇数,奇数=原本偶数+1 2.偶数=原本偶数+1,奇数=原本奇数

这个我们采用线段树维护

维护三个标记 rev、偶数+、奇数+即可

 

转载于:https://www.cnblogs.com/yinwuxiao/p/11130550.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值