zoukankan      html  css  js  c++  java
  • 点分治

    适用

    (·)树上路径类

    (·)树上点对

    例题

    luoguP3806

    模板题

    加强数据后要先把所有询问离线,每次(solve)挨个子树遍历,然后(tmp[k])表示当前遍历的子树中没有长度为(k)的链,(jud[k])表示曾经遍历的子树中有没有长度为(k)的链,双

    指针啥的扫一扫,清空千万别(memset),拿栈存下来手动清空

    luoguP4178

    用树状数组维护前缀和统计答案

    luoguP4149

    把统计答案改成(dp)

    luoguP2634

    每条边权膜(3),统计数量之后(1)(2)拼,(3)自己和自己拼

    注意我们要容斥掉在同一子树中拼起来的方案

    luoguP2664

    (Treeloveswater)大佬的题解啦

    对于树上的一点(i),如果(col[i])是在这条链上第一次出现,那么对于其他节点(j(lca(i,j)=rt)),颜色(i)对颜色(j)的贡献是(str[i])

    我们考虑容斥统计答案:

    (col[x])表示颜色(x)的贡献和,(sum)表示所有颜色总贡献

    (dfs)一遍,求出以当前重心为根节点的(col,str,sum)

    枚举子树,先清除其中某一子树对(col,sum)的贡献

    计算该子树中过根节点路径的信息:

    (x=sumlimits_{j=now}^{rt}col[j],num)为当前节点到根的颜色数,(y=str[rt])减去当前整个子树

    那么每个节点(ans[now]+=sum-x+num*y)

    根节点特判(ans[rt]=sum-col[rt]+str[rt])

  • 相关阅读:
    第二章例2-11
    第二章例2-10
    例2-11
    例2-9+2-10
    例2-7+例2-8
    例2-5+2-6
    例2-4
    例2-3
    例2-2
    例2-1
  • 原文地址:https://www.cnblogs.com/knife-rose/p/12419374.html
Copyright © 2011-2022 走看看