$bzoj1060-ZJOI2007$ 时态同步 贪心 树形$dp$

时间:2019-05-03 00:13:57   收藏:0   阅读:123
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAXN=5e5+5;
const int MAXM=1e6+6;
int n,S;
int edge,head[MAXN],tail[MAXM],nex[MAXM],w[MAXM];
ll f[MAXN],g[MAXN];
void add(int u,int v,int W){
    edge++,nex[edge]=head[u],head[u]=edge,tail[edge]=v,w[edge]=W;
}
void dfs(int u,int p){
    for (int e=head[u];e;e=nex[e]){
        int v=tail[e];
        if (v==p) continue;
        dfs(v,u);
        g[u]=max(g[u],g[v]+w[e]);
    }
    for (int e=head[u];e;e=nex[e]){
        int v=tail[e];
        if (v==p) continue;
        f[u]+=f[v]+g[u]-(g[v]+w[e]);
    }
}
int main(){
    scanf("%d%d",&n,&S);
    for (int i=1;i<n;i++){
        int u,v,w; scanf("%d%d%d",&u,&v,&w);
        add(u,v,w); add(v,u,w);
    }
    dfs(S,0);
    printf("%lld\n",f[S]);
    return 0;
}

原文:https://www.cnblogs.com/shjrd-dlb/p/10803861.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!