旅行者

我不会高妙建树做法。喜提最劣解。差点被卡常,但是过了,赢。

考虑从后往前 dp,dpi 为以 i 开头的路径方案数。考虑一个 i 能从哪些 j 转移来。发现 j 一定是从 i 开始,除了最后一个点,只经过 i 的点能到达的点。

这个条件容易让我们联想到 kruscal 重构树。建出重构树之后可以转换成一个链加单点茶的问题,树剖+BIT 解决。

但是发现原图上的边权不好处理。不过你最近做了点网络流,你会拆点。你把一个点拆成 degi 个点,使每个点变成一条链,链上相邻点之间连边,并且每个点除了链上的边度数为 1

然后你就发现这个图可以做了。但是你发现这样贡献会算重。因为每次进行一个点到根的路径+显然会重复。

但是我们有解决方案:将每个要更新的点按照 dfn 排序,然后 a1a2 路径+,a2a3 路径+(这些要除了 lca),a1root 路径+,akroot 路径+。然后每个点的值 ×12 就是真实值了!

但是 @Explodingkonjac 学长有更好的基于一点小差分的方法:变成每个点单点+,lca-,求子树和。不用树剖,成为理论最优复杂度!/bx

posted @   yinhee  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示