Submission
Status:
xxxxxxx--xP-x-xP-x--xxx---xxx-
Score: 8
User: detectives_conan
Problemset: Sirabyrinth 6
Language: cpp
Time: 0.007 second
Submitted On: 2025-03-14 16:07:53
/*
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 = 1e4 + 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();
}