IOI 热病

发布时间 2023-08-05 21:21:51作者: _kkio

好。

最关键的观察:第一个人确定走的方向后,所有人走的方向都只有一种可能使他感染。

那现在就有一个显然的做法:枚举第一个人走的方向,所有人之间如果能相遇,就连边,用类似最短路的方法来求。

现在边数是 \(n^2\) 的,但是这种东西有个套路,就是对于任意一点,一个方向上的边只建一条最近的边。

边的种类有两种,加上方向不同,每种方向的人有三种不同的边。开四个 \(dis\) 数组表示三种边走来的距离和感染他的最小时间,跑最短路就可以了。

代码难度较大,几个技巧是提前离散化出每个直线上的点,还有给每种边编号一类的。谨慎实现。