知识点
最短路径算法
最短路径树
每个点 u u u的父亲为使 u u u得到最短距离的前驱节点,若有多个,则取任意一个。
题目
CF449B Jzzhu and Cities
CF464E The Classic Problem
[XSY3888] 传送门
对每个点
u
u
u,记
d
(
u
)
d(u)
d(u)表示
u
u
u到
T
T
T的最短路,
e
(
u
)
e(u)
e(u)表示删掉它和最短路上父亲的边后的最短路。令
d
p
(
u
)
dp(u)
dp(u)表示
S
=
u
S=u
S=u时的答案。每次找到
d
p
dp
dp值最小的点来更新其它的点的
d
p
dp
dp值即可。用
u
u
u更新
v
v
v时的转移为
d
p
(
v
)
=
m
i
n
{
m
a
x
(
d
p
(
u
)
+
w
(
u
,
v
)
,
u
=
=
p
a
r
e
n
t
v
?
e
(
v
)
:
d
(
v
)
)
}
dp(v)=min\{max(dp(u) + w(u, v), u==parent_v?e(v) : d(v))\}
dp(v)=min{max(dp(u)+w(u,v),u==parentv?e(v):d(v))}。
e
(
u
)
e(u)
e(u)的求法见[USACO09JAN]Safe Travel G
摘自此Blog
Code