题意
给出一个(N)个点(M)条边的无向图,还有(Q)个询问,每次询问给出两个节点(x_i)和(y_i),要求必须从这两个点出发总共访问至少(z_i)个点(包括(x_i)和(y_i)),要求最小化访问到的最大编号的边的编号,并输出这个编号。
- (3leq N leq 10^5)
- (N-1leq Mleq 10^5)
- (1leq Qleq 10^5)
分析
先考虑一种最为暴力的做法,我们先考虑第(i)个询问,我们依次从(1cdots M)加入边,然后判定一下(x_i)和(y_i)的连通分量(两个或者一个)是否能够访问到一共(z_i)个点,然后就可以直接找到了。
考虑(Q)个如果暴力计算肯定非常浪费,我们考虑既然是最小化最大值,那应该可以考虑对于编号的权值进行分治,我们考虑要依次计算每一层从左到右的贡献(开头的还需要清空),那么就是裸题了,我们判定一下这区间里面的答案在哪里,就可以递归下去计算了。实际上这个操作感觉比较类似于对于权值进行cdq分治,也类似于整体二分。
时间复杂度,由于每一层是( ext O(M)),每一个询问在每一层最多被计算一次,那么就是( ext O((M+Q)log M))的。