树上最长路径

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e4+10;
vector<pair<int,int>>g[maxn];
int d1[maxn],d2[maxn];
void dfs(int u,int fa){
    for(auto &t:g[u]){
        int x=t.first,y=t.second;
        if(x==fa)continue;
        dfs(x,u);
        int d=y+d1[x];
        if(d>d1[u])d2[u]=d1[u],d1[u]=d;
        else if(d>d2[u])d2[u]=d;
    }
}
int main()
{
    ios::sync_with_stdio(false);
    int n;
    cin>>n;
    for(int i=1,u,v,val;i<n;i++){
        cin>>u>>v>>val;
        g[u].push_back(make_pair(v,val));
        g[v].push_back(make_pair(u,val));
    }
    dfs(1,-1);
    int ans=0;
    for(int i=1;i<=n;i++)
    ans=max(ans,d1[i]+d2[i]);
    cout<<ans;
}

  

posted @ 2021-05-20 17:50  Acception  阅读(48)  评论(0)    收藏  举报