阿拉尔市网站建设_网站建设公司_改版升级_seo优化
2026/1/21 19:48:21 网站建设 项目流程

UVA1464 Traffic Real Time Query System 题解

题目大意

题目传送门

给出一张 \(n\) 个点,\(m\) 条边的无向连通图,问从第 \(s\) 条边到第 \(t\) 号边必须经过多少点。题目有多组数据。

思路

转换问题

这道题类似于 P4320,不过那一题求的是点之间的必经点数,这一题求的是边之间的必经点数。

先建出圆方树,再想如何把边转换成点来做。

根据点双联通分量(下面简称点双)的性质,每条边在且仅在唯一一个点双之中。

所以可以把这条边转换成这条边所在的点双在圆方树中的点,接下来这再求两条边转换成的点之间必须要经过的点。

求边属于的点双

这时候就有一个问题,如何求出一条边所在的点双,先设连接这条边的两个节点编号为 \(u,v\)

根据圆方树的性质,\(u\)\(v\) 在圆方树上的距离一定为 2,且 \(u\)\(v\) 路径中间的点一定为这条边所在的点双。

由于距离只有 2,所以 \(u\)\(v\) 在树上的位置关系只有三种。

下面每种情况都用一张图片举例,为了方便表示,设 \(fa_a\)\(a\) 的在树上的父亲,最后要求的点双为 \(x\)

第一种情况:\(u\)\(v\) 父亲的父亲

真不巧,图片炸了,请在评论中告诉我。

这种情况需要判断 \(u=fa_{fa_v}\),最后要求的点双 \(x\)\(fa_v\)

第二种情况:\(v\)\(u\) 父亲的父亲

真不巧,图片炸了,请在评论中告诉我。

这种情况需要判断 \(v=fa_{fa_u}\),最后要求的点双 \(x\)\(fa_u\)

第三种情况:\(x\)\(u\)\(v\) 共同的父亲。

真不巧,图片炸了,请在评论中告诉我。

这种情况需要判断 \(fa_u=fa_v\),最后要求的点双 \(x\)\(fa_u\)

求最终的答案

通过上面的三种情况,能求的 \(u\)\(v\) 这条边的点双 \(x\),设另一条边的点双为 \(y\),最终的答案为 \(x\)\(y\) 的必经点的个数。

根据 P4320 的结论,\(x\)\(y\) 的必经点的个数即为 \(x\)\(y\) 路径上割点的个数。

由于 \(x\)\(y\) 都是点双,手摸几组情况可知 \(x\)\(y\) 路径上割点的个数为 \(\frac{l}{2}\),其中 \(l\) 表示 \(x\)\(y\) 路径的长度。

\(l\) 可以通过倍增 LCA 在 \(O( \log n)\) 的时间复杂度求出。

最终总时间复杂度为 \(O(q \log n)\)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询