![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
倍增
Love_xyh
这个作者很懒,什么都没留下…
展开
-
CF1059E Split the Tree
ans[u]:覆盖完u的子树需要的最少次数。 f[u]:花费最少次数覆盖完u的子树后,u还可以向上延伸的最大长度。 len[u]:从u开始可以向上延伸的最大长度。 正常情况下: ans[u]+=ans[e[i].to]],f[u]=max(f[e[i].to]) 若u为叶节点: ans[u]=1,f[u]=len[u] 若到u时,f[e[i].to]刚好全部空了: ans[u]+=ans[e[i].to],ans++,f[u]=len[u] len[u]通过倍增可得,ans[u],f[u]树形dp即可。 #原创 2020-10-09 23:36:44 · 116 阅读 · 0 评论 -
CF739B Alyona and a tree
我们可以发现,每一个节点,都会向上 对连续的一个节点段中的每个节点产生1的贡献。所以,我们可以对于每个节点先倍增处理出dis<=a[u]的最上面的节点,之后对于这一连续的节点段,差分累加答案。 #include <bits/stdc++.h> #define int long long using namespace std; const int N=2e5+5; int n,u,w; int a[N],d[N],dis[N][21],p[N][21],f[N]; int cnt,head原创 2020-08-28 19:51:17 · 111 阅读 · 0 评论