zoukankan      html  css  js  c++  java
  • [AGC002 D]Stamp Rally

    题意

    给出一个(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))的。

  • 相关阅读:
    synchronized关键字的用法
    for循环删除集合陷阱
    Java之可变参数
    下拉菜单中的Option对象
    JavaScript数组
    线程
    尝试用代码写博客
    环境配置大全
    3中边缘检测算子
    caffe新手入门
  • 原文地址:https://www.cnblogs.com/wendavid/p/8990040.html
Copyright © 2011-2022 走看看