m
i
s
s
i
o
n
:
mission:\qquad
mission:依次通过
1
,
a
1
,
b
1
,
a
2
,
b
2
,
.
.
.
,
a
n
,
b
n
1,a_1,b_1,a_2,b_2,...,a_n,b_n
1,a1,b1,a2,b2,...,an,bn的最短路
P
o
r
t
a
l
:
Portal:\qquad
Portal:可以在所在点设传送门,两个传送门之间可以瞬移
R
C
c
o
n
t
r
o
l
l
e
r
:
RC\,controller:\qquad
RCcontroller:可以随时关闭任何一个传送门
Solution
直接
D
P
DP
DP,
F
l
o
y
d
Floyd
Floyd预处理出最短路
两个传送门不会同时存在,因为随时可以在所在点重新造一个,结果不会更差(省去了跑到传送门的一段路)
因为目前在那个点并不重要,可以不用记录
d
p
[
i
]
[
j
]
dp[i][j]
dp[i][j]表示第
i
i
i个任务,当前传送门在点
j
j
j
C
a
s
e
1
:
Case\,1:\qquad
Case1:十一路车跑,传送门随便设
d
p
[
i
]
[
j
]
=
m
i
n
(
d
p
[
i
]
[
j
]
,
d
p
[
i
−
1
]
[
j
]
+
d
i
s
[
x
]
[
y
]
)
dp[i][j]=min(dp[i][j],dp[i-1][j]+dis[x][y])
dp[i][j]=min(dp[i][j],dp[i−1][j]+dis[x][y])
C
a
s
e
2
:
Case\,2:\qquad
Case2:随便找一个点设传送门和已有的一起施法
d
p
[
i
]
[
j
]
=
m
i
n
(
d
p
[
i
]
[
j
]
,
d
p
[
i
−
1
]
[
k
]
/
/
j
为
新
传
送
门
,
k
为
老
传
送
门
dp[i][j]=min(dp[i][j],dp[i-1][k]//j为新传送门,k为老传送门
dp[i][j]=min(dp[i][j],dp[i−1][k]//j为新传送门,k为老传送门
+
m
i
n
(
d
i
s
[
x
]
[
j
]
,
d
i
s
[
k
]
[
j
]
)
/
/
跑
到
j
传
送
到
k
,
或
传
到
k
再
跑
到
j
+min(dis[x][j],dis[k][j])//跑到j传送到k,或传到k再跑到j
+min(dis[x][j],dis[k][j])//跑到j传送到k,或传到k再跑到j
+
m
i
n
(
d
i
s
[
k
]
[
y
]
,
d
i
s
[
j
]
[
y
]
)
)
/
/
从
k
跑
到
终
点
,
或
从
j
跑
到
终
点
+min(dis[k][y],dis[j][y]))//从k跑到终点,或从j跑到终点
+min(dis[k][y],dis[j][y]))//从k跑到终点,或从j跑到终点