Submission

Status:
----------P----P--------------

Score: 8

User: detectives_conan

Problemset: Sirabyrinth 6

Language: cpp

Time: 0.008 second

Submitted On: 2025-03-14 16:08:41

/*
    Author : detective conan
    Problem : Sirabyrinth
    created : 14/03/2025 15:49 UTC+7
*/
#include <bits/stdc++.h>
#define FOR(i, s, t) for(int i = s; i <= t; ++i)
#define rep(i, s, t) for(int i = s; i >= t; --i)
#define HAVE_TESTCASE false
#define DB(n, s) cout << n << s
#define ANS(n, s) DB(n, s)
#define mod (int)(1e9 + 7)
#define sum(a, b) ((a%mod) + (b%mod))%mod
#define mul(a, b) ((a%mod) * (b%mod))%mod
#define conan cin.tie(nullptr)->sync_with_stdio(false)

using namespace std;
using i64 = int64_t;
using u64 = unsigned i64;
using u32 = unsigned;

const int MAX_N = 2e4 + 10;
int n, k, u, v, w, dp[MAX_N], ans;
vector<pair<int, int>> vc[MAX_N];

void dfs1(int u, int pa){
    for(auto x:vc[u]){
        int v = x.first, w = x.second;
        if(v == pa) continue;
        dp[u] += w;
        dfs1(v, u);
        dp[u] += dp[v];
    }
}

void dfs2(int u, int pa){
    pair<int, int> mx = {-1, -1};
    for(auto x:vc[u]){
        int v = x.first, w = x.second;
        if(v == pa) continue;
        mx = max(mx, {w + dp[v], w});
    }
    int use = -1;
    for(auto x:vc[u]){
        int v = x.first, w = x.second;
        if(v == pa) continue;
        if(mx.first == w + dp[v] && mx.second == w){
            use = v;
            ans += w;
            dfs2(v, u);
            break;
        }
    }
    for(auto x:vc[u]){
        int v = x.first, w = x.second;
        if(v == pa || v == use) continue;
        ans += (w + dp[v])*2;
    }
}

void solve(){
    cin >> n >> k, k++;
    FOR(i, 1, n - 1){
        cin >> u >> v >> w;
        u++, v++;
        vc[u].emplace_back(v, w);
        vc[v].emplace_back(u, w);
    }
    dfs1(k, -1);
    dfs2(k, -1);
    ANS(ans, '\n');
}

int main(){
    conan;
    int t = 1;
    if(HAVE_TESTCASE) cin >> t;
    while(t--) solve();
}