图论 - 线段树优化建图
简介
当涉及区间之间的连边操作时,可以考虑使用线段树优化建图,首先建立线段树,让父结点指向子结点或相反,边权为零,然后就会发现无论是最短路还是连通性,都与原图无区别。
[CF786B] Legacy
在宇宙中一共有 个星球标号为 。Rick 现在身处于标号为 的星球(地球)但是他不知道 Morty 在哪里。
众所周知,Rick 有一个传送枪,他用这把枪可以制造出一个从他所在的星球通往其他星球(也包括自己所在的星球)的单行道路。但是由于他还在用免费版,因此这把枪的使用是有限制的。
默认情况下他不能用这把枪开启任何传送门。在网络上有 个售卖这些传送枪的使用方案。每一次你想要实施这个方案时你都可以购买它,但是每次购买后只能使用一次。每个方案的购买次数都是无限的。
网络上一共有三种方案可供购买:
- 开启一扇从星球 到星球 的传送门;
- 开启一扇从星球 到标号在 区间范围内任何一个星球的传送门。(即这扇传送门可以从一个星球出发通往多个星球)
- 开启一扇从标号在 区间范围内任何一个星球到星球 的传送门。(即这扇传送门可以从多个星球出发到达同一个星球)
Rick 并不知道 Morty 在哪儿,但是 Unity 将要通知他 Morty 的具体位置,并且他想要赶快找到通往所有星球的道路各一条并立刻出发。因此对于每一个星球(包括地球本身)他想要知道从地球到那个星球所需的最小钱数。
输入数据的第一行包括三个整数 , 和 分别表示星球的数目,可供购买的方案数目以及地球的标号。
接下来的 行表示 种方案。
- 输入
1 v u w
表示第一种方案,其中 意思同上, 表示此方案价格。- 输入
2 v l r w
表示第二种方案,其中 意思同上, 表示此方案价格。- 输入
3 v l r w
表示第三种方案,其中 意思同上, 表示此方案价格。对于 的数据,,
题目链接:CF786B。
这个题先看一个比较朴素的写法。
1 |
|
[PA11] Journeys
一个星球上有 个国家和许多双向道路,国家用 编号。
但是道路实在太多了,不能用通常的方法表示。于是我们以如下方式表示道路: 表示,对于任意两个国家 ,如果 ,那么在 之间有一条道路。
首都位于 号国家。你想知道 号国家到任意一个国家最少需要经过几条道路。保证 号国家能到任意一个国家。
对于所有测试点,保证 ,,,。
题目链接:P6348。
其实我们可以就建一个树,然后找到这个树上值最大的那个结点,第二个树的对应位置编号就与他差这个值 offset
。
注意双向边不能复用虚点,因为 如果有 那么 和 内部就两两建边了,就不对了。此外本题也可以直接 0/1 BFS 也可以直接 Dijkstra 因为线段树有一个 所以这个地方对复杂度没啥影响。
1 |
|