知识点
最短路径算法
最短路径树
每个点uuu的父亲为使uuu得到最短距离的前驱节点,若有多个,则取任意一个。
题目
CF449B Jzzhu and Cities
Blog
CF464E The Classic Problem
Blog
[XSY3888] 传送门
对每个点uuu,记d(u)d(u)d(u)表示uuu到TTT的最短路,e(u)e(u)e(u)表示删掉它和最短路上父亲的边后的最短路。令dp(u)dp(u)dp(u)表示S=uS=uS=u时的答案。每次找到dpdpdp值最小的点来更新其它的点的dpdpdp值即可。用uuu更新vvv时的转移为
dp(v)=min{max(dp(u)+w(u,v),u==parentv?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
传送门 Code