2025.2.4 鲜花

hzoi898 交通网络 题解?

Underground

是那个纯音乐啦~

Ans

注意到:一个只能说真话,一个绝不说假话

这题有四样读法,你知道么?

出一个毒瘤 ds 的最好方式就是把序列问题直接出到树上,考察选手树剖能力。

正确的题意:

给定一棵树,在时刻 [tl,tr] 链加,查时刻 t 时链上值不为 0 的边数。

这个题没啥意思,区间加(任意时刻序列中的值 0),区间数 0 板子,并且还放暴力过了。

考虑一个有点意思的错误读法。

时刻 [tl,tr] 区间加,查时刻 t 时区间值不为 0 的极长连续段数。

有两种做法:

  1. Qyun 式:

    考虑直接标记永久化,删除的时候直接用其两个儿子更新就可以了。

  2. wang54321 式:

    考虑维护区间 0 的个数 x 和区间连续两个都是 0 的个数 y

    发现对于一个区间极长段数 =x2y22=xy

    考虑每两个数之间插入一个虚点,其值是这两个数的和,于是区间连续两个都是 0 的数的个数等于区间虚点 0 的个数。

    分别维护原序列和虚点即可。

稍微扩展一下也是容易的,考虑:区间加(任意时刻序列中的值 0),区间值不为 0 的极长连续段数。

2 直接就可以做,1 发现其标记永久化的意义是保证其儿子的值是对的,并且标记始终在其能在的最上层(为了保证查询当前节点时一定有标记),其实是可以推标记的,考虑两个儿子标记如何合并到其父亲,本质上是取 min,但是需要维护节点信息,考虑每个节点维护一下其没有标记时的信息(大概是段数、左右端点是否有值),加上一些分讨还是可以向上传递的。

上树也是直接上,就是有不少细节。

P

补一下昨天的 zzz 图

posted @   5k_sync_closer  阅读(41)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示