P1131 [ZJOI2007] 时态同步

#include<cstdio>
#include<iostream>
#include<algorithm>
//#include<queue>
//#include<vector>
//#include<bits/stdc++.h>
#define ll long long
#define ddd printf("-----------------------\n");
using namespace std;
const int maxn=5e5+10 ;

int head[maxn],to[maxn<<1],nxt[maxn<<1],w[maxn<<1],tot;
int n,s,dis[maxn];
ll ans;

void add(int u,int v,int val){
    to[++tot]=v,nxt[tot]=head[u],head[u]=tot,w[tot]=val;
}

void dfs(int u,int fa)
{
    for(int i=head[u];i;i=nxt[i])
    {
        int v=to[i];if(v==fa) continue;
        dfs(v,u);
        dis[u]=max(dis[u],dis[v]+w[i]);
    }
    for(int i=head[u];i;i=nxt[i])
    {
        int v=to[i];if(v==fa) continue;
        ans+=dis[u]-dis[v]-w[i];
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin>>n>>s;
    for(int i=1;i<=n-1;i++){
        int u,v,val;cin>>u>>v>>val;
        add(u,v,val),add(v,u,val);
    }
    dfs(s,0);
    
    cout<<ans<<'\n';
    
    return 0;
}

 

posted @ 2023-09-17 16:05  JMXZ  阅读(19)  评论(0)    收藏  举报