zoukankan      html  css  js  c++  java
  • THUWC前集训Day4

    THUWC前集训Day4

    T1 drinkbeer

    严格弱于「ZJOI2016」旅行者 ,所以我就直接用那种分治去做了。

    T2 kingpower

    口胡的,还没过,因为没写过最小圆覆盖

    考虑(H=0)的时候就是找一个点,最小化到其余所有点的最大距离(并和(R)取max)。这玩意就是个最小圆覆盖。

    然后枚举(H),此时(D'=sqrt{D^2-H^2}) ,可以(O(1))转移之。

    期望复杂度(mathcal O(n+H))

    T3 wwt

    40pts就是每次重新求边双并建边双树,所求即为边双树上两点间距离。

    考虑优化“重新求边双”的过程。考虑一条边的贡献:连接两个原本不连通的连通块,或将一条链上所有边双缩成一个更大的边双。

    用LCT维护。第一种就是直接link。若询问只有一组,那么两个点往LCA上跳,要是和父亲不在同一个点双中就缩起来然后继续往上跳。每条边只能被缩一次所以每组询问是(O(nlog n))的。但多组询问时,若树是一条长链,每次改两个端点就变成(O(Qnlog n))了。

    实际上没必要把那些边真的缩掉。如果边(x)已经被缩掉了就令其边权为0,否则为1,询问即转化为两点间边权和,修改即为链修改。有个细节是LCT一般是修改点权和询问点权和,但这里是边权。我的解决方法link完后给所有连通块随便指定一个根,依此定义LCA,然后将对LCA的影响撤销。询问完后再撤销修改。

    复杂度(mathcal O((n+Q+sum k)log n)).

    My code

  • 相关阅读:
    Python学习笔记013_正则表达式
    Python学习笔记012_网络_异常
    Python学习笔记011_模块_标准库_第三方库的安装
    Python学习笔记010_迭代器_生成器
    PHP extract() 函数
    php 获取客户端IP
    php array_walk
    PHP array_map()
    PHP call_user_func
    类的更新----MVC设计模式
  • 原文地址:https://www.cnblogs.com/oierwanhong/p/14170373.html
Copyright © 2011-2022 走看看