开车旅行
解题思路
我们可以先处理出 A A A 和 B B B 在每个城市会下一个前往的城市是哪个,这个可以用双向链表来处理。
然后我们就可以进行倍增,转移式如下:
{ f 0 , i , , j = f 0 , f 0 , i , j − 1 , j − 1 d i s 0 , i , j = d i s 0 , i , j − 1 + d i s 0 , f 0 , i , j − 1 , j − 1 d i s 1 , i , j = d i s 1 , i , j − 1 + d i s 1 , f 0 , i , j − 1 , j − 1 \begin{cases} f_{0,i,,j}=f_{0,f_{0,i,j-1},j-1} \\dis_{0,i,j}=dis_{0,i,j-1}+dis_{0,f_{0,i,j-1},j-1} \\ dis_{1,i,j}=dis_{1,i,j-1}+dis_{1,f_{0,i,j-1},j-1} \end{cases} ⎩⎪⎨⎪⎧f0,i,,j=f0,f0,i,j−1,j−1dis0,i,j=dis0,i,j−1+dis0,f0,i,j−1,j−1dis1,i,j=dis1,i,j−1