图函数
题解
挺水的。
很容易发现,当且仅当 u u u能够不经过 ( 0 , v ) (0,v) (0,v)的点到达 v v v,才会对答案产生贡献。
所以我们就有了一个很简单的44pts暴力,对于每个图的每个点去找它可以到达那些点。
由于它的图是一条边一条边的删过去,我们很容易想到将它离线下来转化成一条边一条边地加上去。
我们可以针对每个点 u u u,将边一条一条地加入图中。记录在加入第几条边时 u u u可以到达 v v v,那么点对 ( u , v ) (u,v) (u,v)对这条边为被删除的图中都会产生贡献。
由于它要使得 u − > v u->v u−>v的路径上没有经过编号在 ( 0 , v ) (0,v) (0,v)中的点,所以我们对于点 u u u就只加入两端都 ⩾ u \geqslant u ⩾u的边,也只讨论 u u u关于 v ⩾ u v\geqslant u v⩾u的点的连通情况。
由于它要求这两个点之间能够互相到达,我们需要维护一个正图和一个反图,答案就是这两个图之间的 max \max max。
时间复杂度是 O ( n m ) O\left(nm\right) O(nm),看起来能过,但交上去只有80ts,得想办法优化卡常一下。
我们先分析一下哪些地方造成了大量时间的浪费,因为按理说, n m nm nm的 2 × 1