[HNOI2016]最小公倍数
思维题。
考虑离线。然后判断 i , j i,j i,j 是否有通路,以及经过的边大小不超过 b b b ,经过了一条正好等于 a a a 的边。
考虑转化问题。本题实际上是求,在边 ( u , v ) (u,v) (u,v) 满足 a x ≤ a a_x\leq a ax≤a , b x ≤ b b_x\leq b bx≤b 的情况下, ( i , j ) (i,j) (i,j) 能否联通,且联通块内是否存在 a x = a a_x=a ax=a , b x = b b_x=b bx=b 的边。
考虑分块。先给边按第一关键词排序,给边分块,再把同一块里的询问按第二关键词排序,再把当前块前面的点按照第二关键字排序,这样当前块前面的点都是符合当前询问点对于第一关建字条件的,而且第二关键字都是单调的,所以按块的顺序处理一下,然后对于每个询问,暴力处理一下当前块的贡献(注意此时第一关键字并不单调)。
对于相同块的部分,可以 BFS 处理。因为边的个数有限,所以时间复杂度是边的条数。
当块为 m l o g n \sqrt{mlogn} mlogn 时最优。