zoukankan      html  css  js  c++  java
  • 树链剖分刷题总结

    前言

    因为(kma)过菜导致被数据结构吊打QWQ,这里总结一下做过的树剖题,大概是个一句话题解+记录犯过的睿智错误的地方


    染色

    传送门

    染色

    分析

    先考虑在线段树上维护区间颜色段的做法:记一下区间左右端点,每次合并上来是左儿子总数+右儿子总数,再判一下中间颜色是否一样决定是否-1
    在树上维护同理,注意在跳重链的时候判一下两段重链相邻部分是否颜色一致

    博客链接

    染色


    月下“毛景”树

    传送门

    月下“毛景”树

    分析

    第一遍(DFS)的时候把边权下放到点上,注意跳重链最后跳过(LCA)(LCA)的点权是上面边下放下来的)

    博客链接:

    月下“毛景”树


    松鼠的新家

    传送门

    松鼠的新家

    分析

    每次走边可以看做沿途点权+1,但起点不要+1(完美被坑)
    (另:本题可以树上差分,代码待补)

    博客链接:

    松鼠的新家


    部落冲突

    传送门

    部落冲突

    分析

    先把边权下放到点上(常规操作),然后考虑两种办法维护:

    • 同染色,查询区间颜色段是否为1且均为连通
    • 维护区间最值,给连通和不连通分别打1或0,然后查询最值判断是否连通

    博客链接

    部落冲突


    树上操作

    传送门

    树上操作

    分析

    洛谷链剖板的弱化版,着重说一下字树加等于直接在线段树上(modify(1,num[u],num[u]+siz[u]−1,d))(利用dfs序的思想,一波(dfs)下去一个节点的子树(含它自己)的(dfs)序肯定是连续一段,且子树节点中(dfs)序最大的一个为(siz[u] - 1)

    博客链接

    树上操作


    旅游

    传送门

    旅游

    分析

    维护一个(bool)类型的反色标记记录是否需要取反(取两次等于不取),每次取反时(sum(p) -= 2 * sum(p)),最大值变成原最小值的相反数,最小值同理
    坑点:
    听说上面的代码可以这么写:

    sum(p) -= 2 * sum(p), Max(p) = -Min(p), Min(p) = - Max(p);
    

    我tm当场去世。

    博客链接

    旅游

  • 相关阅读:
    动态加载并执行Win32可执行程序
    二维码登录
    深度神经网络实现图像理解的原理
    NET Core Docker部署
    EventStore的设计思路
    NET Core,Ubuntu运行
    Tensorflow 神经网络
    System.Reflection.Emit学习
    泛型 "new的性能"
    蚁群算法
  • 原文地址:https://www.cnblogs.com/kma093/p/11154809.html
Copyright © 2011-2022 走看看