dfs序入门 CF上的几道题

dfs序就是把一个点的所有子节点映射到某个连续子区间来进行一定操作,用线段树或者其他做法降低时间复杂度,和树链剖分类似(当然要更简单)

由于我太菜了,做了好几道题终于感觉自己算是入门了

第一题:

CF 343D(线段树时间戳)

三个操作:
1 v:把v和v的所有儿子染色
2 v:把v和v的所有父亲取消染色
3 v:查询某个节点颜色
做法:利用染绿色的性质,如果某个节点在某个时间t1被染绿,在时间t2被取消,那么当且仅当t1>t2时这个时候他被染色
代码

第二题

CF 396C(线段树)

两个操作:
1 v x k:把v的儿子中距离v长度i的加上x-k*i
2 v:查询v的值
做法:我本来是想直接建线段树的,结果发现自己太菜写不出来。。做法:两个线段树,每次操作,T1中子树加上x+k*height[v],T2中子树加上k,然后查询的时候直接输出T1.query-T2.query*height[v]就行了
代码

第三题

CF 383C(线段树)

每次v增加x,那么它的所有儿子就减小x(孙子再+x,往复这样)
两个操作:
1 v x:v增加x
2 v:查询v的值
做法:我的做法和题解不一样,他是把height是奇数和偶数的分开了,我是直接做,把奇偶节点分别标号,把pushdown和pushup全都写的很复杂。。
代码

第四题

CF 375D(莫队)

一棵树,树上有颜色,查询区间内次数大于等于k次的颜色有几种
看上去好难好难啊。。结果能莫队(本来我知道能莫队还想线段树求大于k的个数来着orz)
代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值