#include "roads.h"
#include <bits/stdc++.h>
#define int long long
#define emb emplace_back
#define pii pair <int32_t, int32_t>
#define tiii tuple <int32_t, int32_t, int32_t>
#define all(a) a.begin(), a.end()
using namespace std;
const int N = 1e5 + 5;
const int inf = 1e18;
int32_t n;
vector <pii> adj[N];
std::vector<long long> minimum_closure_costs(int32_t N, std::vector<int32_t> u,
std::vector<int32_t> v,
std::vector<int32_t> w) {
n = N;
vector <int> l(n + 1), r(n + 1);
for (int32_t i = 0; i < n - 1; i++) {
u[i]++, v[i]++;
adj[u[i]].emb(w[i], v[i]);
adj[v[i]].emb(w[i], u[i]);
r[min(u[i], v[i])] = w[i];
l[max(u[i], v[i])] = w[i];
}
int dp[n + 1][2];
for (int i = 1; i <= n; i++) dp[i][0] = dp[i][1] = inf;
dp[1][1] = r[1];
for (int i = 2; i <= n; i++) {
dp[i][0] = dp[i - 1][1];
if (i < n) dp[i][1] = min(dp[i - 1][0], dp[i - 1][1]) + r[i];
}
// for (int i = 1; i <= n; i++) {
// cout << i << " : " << dp[i][0] << ", " << dp[i][1] << "\n";
// }
vector <int> ans(n);
ans[0] = accumulate(all(w), 0ll);
ans[1] = min(dp[n - 1][0], dp[n - 1][1]);
return ans;
}