#include <bits/stdc++.h>
using namespace std;
using u64 = unsigned long long;
namespace {
const int N = 256;
const int64_t inf = 1e15;
vector dist(N, vector<u64>(N, inf));
class Dsu {
int n;
vector<int> par;
public:
Dsu() {}
Dsu(int n) : n(n), par(n) {
iota(par.begin(), par.end(), 0);
}
int root(int u) { return u == par[u] ? u : par[u] = root(par[u]); }
void merge(int u, int v) {
u = root(u), v = root(v);
if (u != v) {
par[v] = u;
}
}
};
Dsu dsu;
} // namespace
vector<u64> strategy(int n, int r, int i, vector<u64> a, vector<u64> b) {
if (r == 0 && i == 0) {
dsu = Dsu(n);
}
if (r < n) {
for (int j = 0; j < n; ++j) {
dist[i][j] = a[j];
}
return vector<u64>(n, 0);
}
vector<pair<u64, pair<int, int>>> edges;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < i; ++j) {
edges.push_back({dist[i][j], {i, j}});
}
}
sort(edges.begin(), edges.end());
u64 mst_wt = 0;
for (auto &[wt, p] : edges) {
auto [u, v] = p;
if (dsu.root(u) == dsu.root(v)) {
continue;
}
mst_wt += wt;
dsu.merge(u, v);
}
return {mst_wt};
}