[JOI 2021 Final]机器人

题面

link

​ 一个无向图无重边,路 \(i\) 的颜色为 \(C_i(1 \sim m)\) , 可能有路颜色相同。

​ 有一款机器人,当机器人在点 \(x\) 时,告诉这个机器人一种颜色,机器人在与\(x\)相连的路中找到这种颜色的路,经过这条路到达相邻的路口。如果有多于一条满足情况,机器人会停下。

​ 目前机器人在路口 1。请通过告诉机器人颜色,使其移动到路口 \(n\) 。可以预先改变某些道路的颜色,将路 \(i\) 改成任意一种 \(1\sim m\) 中的颜色需要花费 \(P_i\) 日元,问至少需要多少代价才能让机器人移动到点 \(n\)

题解

​ 先要能够看出,这是一个最短路模型。为什么?虽然机器人的移动过程中并没有体现费用,但其实在我们为了让机器人能够移动到下一个点,而修改边的颜色时需要用到费用。

​ 所以此时我们整理一下所有的修改颜色方案,若我们想通过\(i\)条边从\(x_i\rightarrow y_i\)

  • 修改\(i\)的颜色为一个没有出现过的颜色(肯定存在),费用为\(P_i\)
  • \(x_i\)连接的除了\(i\)以外的所有颜色为\(C_i\)的边改为其他颜色,费用为\(su_{x_i,C_i}-P_i\)

​ 很有道理是不是,而且不需要修改的情况也包含在第二种方案中了,但是还是漏了一种,比如这样一组数据:

4 3
1 2 1 1
2 4 1 100
1 3 1 1000

​ 为什么被卡掉了呢?原因是第一条边被算了两次,分别是从\(1\rightarrow 2\)\(2\rightarrow 4\)时,而\(2\rightarrow 4\)时我们已经不需要改第一条边了。

​ 所以我们不得不对这种特殊的情况做考虑,发现这种情况只会发生在两条颜色相同的边。在经过第二条的时候选择第二种修改颜色的方法时才会遇到。所以我们对每一对点 \(x\) 和颜色 \(c\) 建立一个虚点,进入这个虚点边权为 \(0\) ,离开的边权为\(su_{x_i,C_i}-P_i\),表示将进入的费用算在了离开的时候。

​ 最后就是正常的最短路了。

启发

  • 最短路的题目会通过奇怪的题面包装,但只要看出了花费可以移动的话,就可以往最短路想。
  • 最短路的建图会有很多遗漏点,需要通过对拍找反例逐渐完善建图方案。
  • 有时候可以考虑建立虚点,处理一些比较特殊的情况
posted @ 2022-02-17 19:25  qwq_123  阅读(82)  评论(0编辑  收藏  举报