题面
tql
比较显然的做法就是二进制分组然后
d
i
j
dij
dij,
O
(
n
log
2
n
)
O(n\log^2n)
O(nlog2n)
比较巧妙的做法就是考虑每一条边
(
u
,
v
)
(u,v)
(u,v)在最短路径上的情况。
那么求出
u
u
u到这
k
k
k个点的最近距离
d
1
d1
d1,这
k
k
k个点到
v
v
v的最近距离
d
2
d2
d2,那么这条边的贡献就是
d
1
+
d
2
+
d
(
u
,
v
)
d1+d2+d(u,v)
d1+d2+d(u,v),只要这两个最近距离点不同即可。
…
所以两次
d
i
j
dij
dij求正反方向的最短路就行了。
O
(
n
log
n
)
O(n\log n)
O(nlogn)
[GXOI/GZOI2019]旅行者
最新推荐文章于 2019-12-16 21:09:07 发布