1
+ #include < bits/stdc++.h>
2
+ using namespace std ;
3
+
4
+ #define HAR_HAR_MAHADEV int main ()
5
+
6
+ #define mod int (1e9 + 7 )
7
+ #define ll long long
8
+ #define tc \
9
+ int t; \
10
+ cin >> t; \
11
+ while (t--)
12
+ #define fastIO \
13
+ ios_base::sync_with_stdio (false ); \
14
+ cin.tie(0 ); \
15
+ cout.tie(0 )
16
+
17
+ class Graph
18
+ {
19
+ public:
20
+ Graph (ll vertex)
21
+ : V(vertex)
22
+ {
23
+ adj = new vector<pair<ll, ll>>[V];
24
+ }
25
+
26
+ void addEdge (ll u, ll v, ll weight)
27
+ {
28
+ adj[u].push_back ({v, weight});
29
+ adj[v].push_back ({u, weight});
30
+ }
31
+
32
+ void print (vector<ll> &ans);
33
+ ll holiday ();
34
+
35
+ private:
36
+ ll V;
37
+ vector<pair<ll, ll>> *adj;
38
+ };
39
+
40
+ ll Graph::holiday ()
41
+ {
42
+ vector<ll> visited (V, 0 );
43
+ vector<ll> distance (V, 1 );
44
+ function<ll (vector<ll> & visited, vector<ll> & distance, ll src, ll & ans)> dfs;
45
+ dfs = [&](vector<ll> &visited, vector<ll> &distance, ll src, ll &ans)
46
+ {
47
+ visited[src] = 1 ;
48
+ for (auto itr : adj[src])
49
+ {
50
+ ll node = itr.first ;
51
+ ll weight = itr.second ;
52
+ if (visited[node] == 0 )
53
+ {
54
+ distance[src] += dfs (visited, distance, node, ans);
55
+ ans += 2 * min (distance[node], V - 1 - distance[node]) * weight;
56
+ }
57
+ }
58
+ return distance[src];
59
+ };
60
+
61
+ ll ans = 0 ;
62
+ dfs (visited, distance, 1 , ans);
63
+ return ans;
64
+ }
65
+
66
+ void solve ()
67
+ {
68
+ int n;
69
+ cin >> n;
70
+ Graph g (n + 1 );
71
+ for (int i = 1 ; i < n; ++i)
72
+ {
73
+ int u, v, w;
74
+ cin >> u >> v >> w;
75
+ g.addEdge (u, v, w);
76
+ }
77
+ cout << g.holiday ();
78
+ }
79
+
80
+ HAR_HAR_MAHADEV
81
+ {
82
+ fastIO;
83
+ int counter = 1 ;
84
+ #ifndef ONLINE_JUDGE
85
+ cerr << " HEllo" ;
86
+ #endif
87
+ tc
88
+ {
89
+ cout << " Case #" << counter << " : " ;
90
+ solve ();
91
+ cout << " \n " ;
92
+ counter++;
93
+ }
94
+ return 0 ;
95
+ }
0 commit comments