首页 > 其他 > 详细

树的中心

时间:2021-05-20 22:15:02      阅读:12      评论:0      收藏:0      [点我收藏+]
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int maxn=1e5+10;
vector<pair<int,int>>g[maxn];
int d1[maxn],d2[maxn];
int p1[maxn],up[maxn];
int dfs_down(int u,int fa){
    for(auto &t:g[u]){
        int x=t.first,y=t.second;
        if(x==fa)continue;
        int z=dfs_down(x,u)+y;
        if(z>=d1[u])d2[u]=d1[u],d1[u]=z,p1[u]=x;
        else if(z>=d2[u])d2[u]=z;
    }
    return d1[u];
}
void dfs_up(int u,int fa){
    for(auto &t:g[u]){
        int x=t.first,y=t.second;
        if(x==fa)continue;
        if(x==p1[u])up[x]=max(up[u],d2[u])+y;
        else up[x]=max(up[u],d1[u])+y;
        dfs_up(x,u);
    }
}
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_down(1,-1);
    dfs_up(1,-1);
    int ans=0x3f3f3f3f;
    for(int i=1;i<=n;i++)
    ans=min(ans,max(d1[i],up[i]));
    cout<<ans;
    return 0;
}

  

树的中心

原文:https://www.cnblogs.com/qq1415584788/p/14790951.html

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