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

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

时间:2019-09-28 16:22:03      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:void   pre   模板   int   continue   i+1   需要   更新   ==   

注意,若负直径指广义的直径——可以缩成一个点,树形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求直径和负直径

标签:void   pre   模板   int   continue   i+1   需要   更新   ==   

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

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