[Nowcoder]Portal

壹、题目描述 ¶

题目背景

小 W 所在的城市可以简化为 \(N\) 个地点,这些地点之间 \(M\) 条路相连,每条路有一定的长度,保证这些地点可以互相到达。 小W 此时先后接到了 \(K\) 个订单,第 \(i\) 个订单要求 小W 在 \(a_i\) 位置接货,并送达 \(b_i\) 位置。

然而事情并没有这么简单, 小W 呵呵一笑,掏出了一把传送枪,这把传送枪可以在 小W 所在位置放置传送门,假设 \(u\) 点和 \(v\) 点同时存在传送门,那么 小W 可以瞬间从 \(u\) 到达 \(v\) 。为了避免时空错乱,这把传送枪只能打开两个传送门,这意味着当 小W 想要打开第三扇传送门时,他必须关掉先前的某一扇传送门。

你需要注意以下几点:

  • 传送门只能在原地放置,但是可以通过遥控关掉。
  • 小 W 的小摩托一秒只能跑一个单位长度的距离。
  • 小 W 很懒,所以他一次只会取一个货。
  • “先来后到”, 小 W 一定会按照顺序完成他收到的订单。

最开始起点在 \(1\),问最少时间。

数据范围

\(1\leq u,v,a,b\leq n\)\(0\leq w_i\leq 10^9\).

data \(n\) \(m\) \(k\) \(w\)
\(1\)~\(6\) \(\leq20\) \(\leq100\) \(\leq20\) \(\leq10\)
\(7\)~\(14\) \(\leq50\) \(\leq1000\) \(\leq50\) \(\leq10^4\)
\(15\)~\(20\) \(\leq300\) \(\leq40000\) \(\leq300\) \(\leq10^9\)

贰、题解 ¶

  • 其实就是问你 “从 \(1\) 开始,依次经过 \(a_1,b_1,a_2,b_2,\cdots a_k,b_k\) 的最小花费”;
  • 先用 \(\rm Floyd\) 求出 \(dis(u,v)\),这是 \(\mathcal O(n^3)\) 的;
  • 中间过程肯定是停留在关键点;
  • 传送门在过程中显然只会保留一个门;
  • 设状态 \(f(i,j)\) 表示当前在第 \(i\) 个关键点,传送门在 \(j\)
  • 转移的时候特殊处理一下同一个关键点,传送门更改的情况(同层转移)就可以了;
  • 时间复杂度 \(\mathcal O(n^3)\)

叁、参考代码 ¶

无码。

posted @ 2021-09-08 15:53  Arextre  阅读(66)  评论(2编辑  收藏  举报