题解 滑稽树下你和我
官方题解比给的题解好多了……给的题解的方法麻烦了一亿倍
- 关于可以任意移动的点在移动过程中与其它一些点的距离最值问题:考虑二分答案,check在满足二分到的值的情况下能否完成移动
然后给的题解的思路check时是用一个 \((x, y)\) 表示两个点一个到 \(x\),一个到 \(y\) 是否可行
从起点开始bfs即可
两个状态可以移动仅当移动时两点间距离不超过二分的点
然后有个特殊情况:可能一个点移动时另一个点要先暂时移动到一条边上以满足距离限制
见大帝的数据
于是可以把边拆成点处理
但这样就变成了 \(4n^2log1e6\),且各种算距离常数极大
- STL带的hypot函数极慢,建议用手写的
于是官方题解有个更好的做法:
令 \(f[i][j]\) 为是否存在某种方案使得一个点在点 \(i\) 上,一个点在边 \(j\) 上距离点 \(i\) 最近的那个点上
这样转移就只需要考虑
<吃饭去了,咕>