Luogu P5590 赛车游戏 题解
写在前面
众所周知这是一篇题解,当然这也是一篇经验的总结。
它源自于洛谷月赛,传送门:P5590 赛车游戏
笔者写下这篇题解,一是希望自己这次的错误不要再犯,二是希望能帮助大家。
题解部分
题面简析
题意大致可以概括为:给你 \(n\) 个点 \(m\) 条边的 一张图,你需要给每条边加上边权,使得\(1-n\)的所有路径的长度均相等。
现在感觉问题简单多了,我们可以想到暴力地添加边权(反正边权也只有 \(1~9\))
解题思路
很明显上面的办法是不能拿满分的。并且我拿到本题并没有想过要打暴力。
我们假设这张图存在两个顶点 \(u,v\),它们之间的边权为 \(val<u,v>\)。
那么就有:\(dis[u]+val<u,v>=dis[v]\) (\(dis\)数组是节点\(1\)到其他点的路径长度最值)
至于这个最值是什么,稍后再解答。
我提出了上面那个式子,那么很明显我们要求的是 \(val<u,v>\),这东西一定满足 \(1≤val<u,v>≤9\)
好了,现在变形一下式子:\(1≤val<u,v>=dis[v]-dis[u]≤9\),看出来什么了吗?
你仔细看看:\(1≤dis[v]-dis[u]≤9\),差分约束?
没错,就是差分约束,约束条件:\[\left\{ \begin{aligned} dis[v]-dis[u]≥1\\ dis[u]-dis[v]≥-9\\ \end{aligned} \right. \]