知识点
最短路径算法
最短路径树
每个点 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