1A Teleport
假设从大到小枚举 \(ans\),同时维护当前的每个连 \((u,v)\) 是否可行。
关键观察:对于一个 \(i\),连 \((u,v)\) 且 \(dis(i,u)\le dis(i,v)\) 的话,从 \(i\to k\) 走的方法一定是 \(i\to u\to v\to k\)。
对于每个 \(i\) 分别做以下过程:对于 \(dis(i,k) > ans\)(即不合法的点),只需要对所有 \(v\) 维护 \(\max(dis[v][k])\),然后把 \(dis(i,u)+max(dis(v,k))>ans\) 的 \((u,v)\) 弹掉。
时间复杂度 \(O(n^3)\)。
3A
首先二分答案 \(T\)。
如果确定了所有人的相对顺序,那一定会让第一个人的区间尽量靠前,即找到第一个时刻,使得放了第一个人的区间后,仍然有人醒着。这样可以得到 \(n!\) 的做法。
假设每个人第一个可以放的时刻是 \(t_i\),