浅谈一类边权带指数的图论问题

偶然看到了 这道题,求的是边权为 nw 次方时树上的第 k 小路径,觉得这类题目很有意思,就研究了一下。

1|0CF464E The Classic Problem

题意:给一个无向图,每条边的边权是 2wi,求 st 的最短路。

思路:首先,我们可以把距离看成一个二进制数,那么我们需要能支持快速比较两个二进制数,二进制数在某一位 +1,把一个二进制数赋成另一个二进制数的数据结构。

因为有最后一个操作,好像只有可持久化的数据结构支持这一点,于是考虑用主席树来维护。

对于第一个操作,需要维护每个区间的哈希值,比较时找出两个二进制数的 lcp 就可以比较大小。

对于第二个操作,需要能查一个位置后面第一个是 0 的位置和区间清零,前者可以用主席树上二分,后者可以直接把一个空的主席树复制过来。

接下来的部分就比较简单了。直接用 dijkstra,每个点维护一棵主席树,松弛边 (u,v,w) 的时候就是新建一棵主席树表示 disu+2w,然后判断和 disv 的大小关系即可。

2|0[PA2019] Podatki drogowe

题意:有一棵树,每条边的边权为 nwi 次方时树上的第 k 小路径。

思路:因为边权是 nz,而一条路径最多只有 n1 条边,因此不用考虑进位的问题,只用考虑每个 ni 的系数。

首先,肯定要二分答案,但是值域太大不好直接二分,但是一共只有 n(n1)2 条路径,可以考虑直接二分路径,同时采用随机二分。

然后就是怎么判断一条路径在路径集合中的排名。

处理树上路径一般采用点/边分治,这道题用边分治更好处理,于是可以先用边分治处理处所有一半的路径,然后排序,二分判段时双指针计算答案即可。

如何维护每条路径的系数和比较大小呢?和上一题一样,可以把边权看成一个 n 进制数,然后使用主席树。主席树上叶子节点维护 ni 的系数,每个节点都维护当前区间表示的数的哈希值,就可以支持维护路径的系数和比较大小了。

其实这类问题思维量算是紫题的水平,但是困难点就在于代码实现,比如第二题代码长度达到了 6.6k。


__EOF__

本文作者Xttttr
本文链接https://www.cnblogs.com/Xttttr/p/17899900.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Xttttr  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示