【解题总结】Educational Codeforces Round 112

D

合法的 beautiful 串只能是 abc 排列组合后的循环。

E

把给的区间 [ l , r ] [l, r] [l,r] 变成 [ l , r − 1 ] [l, r-1] [l,r1],那么 1 连通 m 等价于选定的区间覆盖 [ 1 , m − 1 ] [1, m-1] [1,m1]。利用双指针用线段树做区间覆盖即可。

F

显然一开始加进去的边若不构成环则一律 YES。考虑开始出现环的情况,这时环一定长在树上(即连接了树上的两个点)。

如果环长在树上,那么可以用类似于求 LCA 的技巧判定该环的边的 xor 是否为 1。如果是,那么可以加入该边,然后就变成了一个环套树。

如果环不长在树上呢?我们可以证明这种情况一定不合法。

考虑某个环套树。如果向其再加任意一条边,使得该边横跨了环套树上两个不同的树,那么一定非法。证明很简单:如果新加的这条边形成的环的 xor 是 1,环套树的环的 xor 也是 1,那么两个环 xor 起来是 0,但这个 0 代表的部分仍然是个环!

如图所示。

在这里插入图片描述

因此只需要恰当的维护这堆树,以及环套树上的树即可。

一种做法是:把一开始的树当作骨架(可以离线做,从而把所有的树都弄出来),如果树上的某条路径变成了环的一部分则把整条路径上的边都染色,那么一条非树边 ( u , v ) (u, v) (u,v) 没有横跨任何环套树上两个不同的树,当且仅当路径 u ↔ v u \leftrightarrow v uv 没有经过任何被染色的边。

这里染色可以暴力染,因为一条边至多被染一次。

代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值