随笔分类 - 树形DP
摘要:若DP统计答案时是自下而上的,则两个子节点在这个节点统计完答案后就用不上了,所以我们可以设x的dfs序为dfn,左儿子的为dfn+1,右儿子dfn+2。这样计算出的结果除了根节点和少数节点外,其他节点的答案都是错的 适用于只用知道根节点的DP值且从下至上更新答案的情况 具体代码如下 c includ
        阅读全文
            
摘要:算法思路就不说了,其实比较简单 这里讲一下坑点: 1.虽然我们可以将边权压到点上,但是当根不同时,差分数组显然不同。所以我们不能真的将边权看做点权,换根时还是要将其当做边权来考虑。 1.更新时,我们设dp[u]表示u节点为根时的最大价值,由于经过点u后,点v的儿子将变成点u,所以此时我们要更新点v的
        阅读全文
            
摘要:注意,若负直径指广义的直径——可以缩成一个点,树形DP无法正确求出,需要将初值设为0(若大于0则不更新)
        阅读全文
            
摘要:```c void dfs(int u,int fa){ f[u]=f2[u]=g[u]=g2[u]=0; for(int i=head[u];i+1;i=e[i].nxt){ int v=e[i].v,w=e[i].w; if(v==fa) continue; dfs(v,u); if(f[v]+
        阅读全文
            
 浙公网安备 33010602011771号
浙公网安备 33010602011771号