Submission
Status:
PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
Score: 100
User: detectives_conan
Problemset: Sirabyrinth 6
Language: cpp
Time: 0.029 second
Submitted On: 2025-03-14 16:22:16
/*
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[MAX_N], dp[MAX_N], ans, pre[MAX_N], mx, node;
vector<pair<int, int>> vc[MAX_N];
map<int, int> mp1;
map<pair<int, int>, int> edge;
void dfs(int u, int pa){
for(auto x:vc[u]){
int v = x.first, w = x.second;
if(v == pa) continue;
dp[v] = dp[u] + w;
pre[v] = u;
dfs(v, u);
}
}
void solve(){
cin >> n >> k, k++;
FOR(i, 1, n - 1){
cin >> u >> v >> w[i];
u++, v++;
mp1[w[i]]++;
edge[{u, v}] = edge[{v, u}] = w[i];
vc[u].emplace_back(v, w[i]);
vc[v].emplace_back(u, w[i]);
}
dfs(k, -1);
FOR(i, 1, n){
if(mx < dp[i]){
mx = dp[i];
node = i;
}
}
while(node != k){
mp1[edge[{node, pre[node]}]]--;
node = pre[node];
}
FOR(i, 1, n - 1){
if(mp1[w[i]]) ans += w[i]*2, mp1[w[i]]--;
else ans += w[i];
}
ANS(ans, '\n');
}
int main(){
conan;
int t = 1;
if(HAVE_TESTCASE) cin >> t;
while(t--) solve();
}