我不知道这是否有用,但如果有的话,我认为你可以使用这个属性:取一对(A,B)
存在这样的路径。然后我们知道路径的边权重之和(我将其称为末端顶点的距离)A -> ... -> B := d(A,B) = 0
,因为
d(A,B) = d(A,X) + d(X,B) = 0 + 0 = 0
正如您所说,我们只关心偶数长度的路径;这表明在实际检查对时,我们首先用两种颜色为树着色(因为所有树都是二分的),这可以在 Θ(n) 中贪婪地完成,并且只考虑每个颜色组内的顶点对。当然,这并没有提高我们必须考虑的对数的复杂性,因为我们在每种颜色中仍然有 (n/2)*(n-1)/2 个顶点,并且该术语在 Θ(n^ 2) 其中n
是顶点数。
现在正如您所说,您可以使用 BFS 计算 Θ(n^2) 中的路径并检查每个颜色组中的所有顶点对。这是另一个可能对您有所帮助的想法:
假设我们有两个顶点 V 和 U d(A,V) = d(A,U)
。我们有两种情况:
A -> ... -> V = A -> ... -> U -> ... -> V
, 表示 U (WLOG) 位于从 A 到 V 的唯一路径上。那么我们有
d(A,V) = d(A,U) + d(U,V) <=> d(A,V) = d(A,V) + d(U,V) <=> d(U,V) = 0
因此,如果 U 和 V 位于同一条路径上并且到 A 的距离相等,则距离d(U,V) = 0
。
两条路在某处分叉;让路径分叉的顶点为K。然后我们有
d(A,V) = d(A,K) + d(K,V) <=> d(K,V) = d(A,V) - d(A,K)
和
d(A,U) = d(A,K) + d(K,U) <=> d(K,U) = d(A,U) - d(A,K)
和
d(U,V) = d(K,U) + d(K,V) = d(A,U) + d(A,V) - 2*d(A,K) = 2*(d(A,U) - d(A,K)) = 2 * d(K,U)
因此,如果U
并且V
不在同一条路径上,它们之间的距离取决于顶点必须到A
的距离和距离A
必须到的距离K
;或者,简化,就在任一顶点到 的距离上K
。更一般地说,这一事实d(A,U) = d(A,V)
仅意味着d(U,V) = 0
任何一个顶点位于从A
另一个顶点的路径上,所以如果后一种情况不是这种情况,你就不能真正以相等的距离告诉任何东西。
这是否会帮助你,我不知道。我无法弄清楚如何在次平方时间内实现您的要求,我认为这是不可能的;对我来说,这个问题感觉与所有对最短路径有很大关系,它的时间复杂度为 O(n^2),每个顶点使用 BFS 作为起始顶点。不过,这更像是一种模糊的感觉,甚至比任何看似令人信服的论点都模糊。