首页 > 其他 > 详细

【模板】树形DP求直径和负直径

时间:2019-09-28 16:18:24      阅读:107      评论:0      收藏:0      [点我收藏+]

注意,若负直径指广义的直径——可以缩成一个点,树形DP无法正确求出,需要将初值设为0(若大于0则不更新)

void dfs(int u,int fa,ll &d1,ll &d2){
    f[u]=f2[u]=0;
    for(int i=head[u];i+1;i=e[i].nxt){
        if(cut[i]) continue;
        int v=e[i].v,w=e[i].w;
        if(v==fa) continue;
        dfs(v,u,d1,d2);
        d1=max(d1,f[v]+w+f[u]);
        f[u]=max(f[u],f[v]+w);
        d2=min(d2,f2[v]+w+f2[u]);
        f2[u]=min(f2[u],f2[v]+w);
    }
}

【模板】树形DP求直径和负直径

原文:https://www.cnblogs.com/White-star/p/11603485.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!