【题解】Solution Set - NOIP2024集训Day52 图论杂题
【题解】Solution Set - NOIP2024集训Day52 图论杂题
https://www.becoder.com.cn/contest/5625
「CF1253F」Cheap Robot
感觉做过啊。
如果我们把充电站两两连边,边权为两点间距离,建一张新图,那么 \((a,b)\) 的答案就是 \((a,b)\) 间路径上最大值的最小值。自然想到 kruskal 重构树。
考虑改进建图。
首先这个连边肯定是不会途径第三个充电中心的。
没什么用……
感觉也没有题解说的那么玄乎。
主要是要去求,每个点到离她最近的充电中心的距离,设其为 \(dis_x\)。
对于一条边 \((u,v,w)\) 可以经过她的必要条件是:\(c\ge dis_u+dis_v+w\)。
这个不等式其实表明,我们可以从 \(u\) 安全的到达 \(v\),并走到一个最近充电中心。(然后我们可以继续从这个最近的充电站再走回 \(v\),然后再继续走。
所以如果有一条路径上的边都满足上面这个不等式,那么这个 \(c\) 一定是合法的,所以这个条件又是充分的。
剩下的就简单了。
我们把每条边重新赋值为 \(dis_u+dis_v+w\),然后就是问 \((a,b)\) 间路径上最大值的最小值。kruskal 重构树然后在线 lca 查询就行。