#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false); cin.tie(nullptr);
size_t cases;
cin >> cases;
while(cases --> 0)
{
size_t n;
cin >> n;
vector<int> A(n);
for(auto& a : A)
cin >> a;
vector<vector<pair<size_t, size_t>>> graph(n);
for(size_t i = 0; i < n - 1; i++)
{
size_t u, v;
cin >> u >> v; u--; v--;
graph[u].emplace_back(v, i);
graph[v].emplace_back(u, i);
}
vector<int64_t> R(n+1, INT64_MAX);
for(size_t mask = 0; mask < (1u << (n - 1)); mask++)
{
size_t vis = 0;
function<int(size_t)> fun = [&](size_t u) {
if(vis >> u & 1)
return 0;
vis |= 1 << u;
int f = A[u];
for(auto [v, i] : graph[u])
if(not (mask >> i & 1))
f += fun(v);
return f;
};
int64_t val = 0;
for(size_t u = 0; u < n; u++)
{
int64_t f = fun(u);
val += f * f;
}
size_t p = __builtin_popcount(mask);
R[p] = min(R[p], val);
}
for(size_t i = 0; i < n; i++)
cout << R[i] << ' ';
cout << endl;
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); size_t cases; cin >> cases; while(cases --> 0) { size_t n; cin >> n; vector<int> A(n); for(auto& a : A) cin >> a; vector<vector<pair<size_t, size_t>>> graph(n); for(size_t i = 0; i < n - 1; i++) { size_t u, v; cin >> u >> v; u--; v--; graph[u].emplace_back(v, i); graph[v].emplace_back(u, i); } vector<int64_t> R(n+1, INT64_MAX); for(size_t mask = 0; mask < (1u << (n - 1)); mask++) { size_t vis = 0; function<int(size_t)> fun = [&](size_t u) { if(vis >> u & 1) return 0; vis |= 1 << u; int f = A[u]; for(auto [v, i] : graph[u]) if(not (mask >> i & 1)) f += fun(v); return f; }; int64_t val = 0; for(size_t u = 0; u < n; u++) { int64_t f = fun(u); val += f * f; } size_t p = __builtin_popcount(mask); R[p] = min(R[p], val); } for(size_t i = 0; i < n; i++) cout << R[i] << ' '; cout << endl; } } |
English