标签:math lov ble 题解 离线 set record 树状 路径
\(·\)树上路径类
\(·\)树上点对
模板题
加强数据后要先把所有询问离线,每次\(solve\)挨个子树遍历,然后\(tmp[k]\)表示当前遍历的子树中没有长度为\(k\)的链,\(jud[k]\)表示曾经遍历的子树中有没有长度为\(k\)的链,双
指针啥的扫一扫,清空千万别\(memset\),拿栈存下来手动清空
用树状数组维护前缀和统计答案
把统计答案改成\(dp\)
每条边权膜\(3\),统计数量之后\(1\)和\(2\)拼,\(3\)自己和自己拼
注意我们要容斥掉在同一子树中拼起来的方案
扒\(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