1207. 大臣的旅费(树的直径板子)

1207. 大臣的旅费

#include <bits/stdc++.h>
using namespace std;

typedef pair<int, int> PII;
#define x first
#define y second

const int N = 1e5 + 10;

vector<PII> g[N];
int n;
int dis[N];

void dfs(int u, int fa, int distance){
    dis[u] = distance;
    for(auto &it : g[u]){
        if(it.x != fa)
            dfs(it.x, u, it.second + distance);
    }
}

signed main(){
    cin >> n;
    for(int i = 0; i < n - 1; ++i){
        int p, q, d; cin >> p >> q >> d;
        g[p].push_back({q, d}); g[q].push_back({p, d});
        
    }
    //随便一个点开始遍历
    dfs(1, -1, 0);
    int u = 1;
    for(int i = 1; i <= n; ++i)
        if(dis[i] > dis[u]) u = i;
    dfs(u, -1, 0);
    for(int i = 1; i <= n; ++i)
        if(dis[i] > dis[u]) u = i;
        
    int s = dis[u];
    printf("%lld\n", 10 * s + s * (s + 1ll) / 2);
    
    return 0;
}
posted @ 2025-03-31 16:45  awei040519  阅读(9)  评论(0)    收藏  举报