码迷,mamicode.com
首页 > 其他好文 > 详细

点分治

时间:2020-03-05 13:48:08      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:math   lov   ble   题解   离线   set   record   树状   路径   

适用

\(·\)树上路径类

\(·\)树上点对

例题

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=\sum\limits_{j=now}^{rt}col[j],num\)为当前节点到根的颜色数,\(y=str[rt]\)减去当前整个子树

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

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

点分治

标签:math   lov   ble   题解   离线   set   record   树状   路径   

原文地址:https://www.cnblogs.com/knife-rose/p/12419374.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!