#include <bits/stdc++.h>
using namespace std;
const int maxn = 10 + 1;
struct cmp {
int idx, value;
};
bool sapxep(cmp a, cmp b) {
return a.value > b.value;
}
int n;
cmp t[maxn];
int a[maxn][maxn];
void dfs(int u, int &ans, vector<bool> &visited) {
visited[u] = true;
for (int i = 1; i <= n; i++) {
if (!a[u][i] || visited[i]) continue;
for(int k =1; k<=n;k++)
if(i == t[k].idx)
{
ans = max(ans, t[k].value);
break;
}
//ans = max(ans, t[i].value);
dfs(i, ans, visited);
}
}
void solve() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> t[i].value;
t[i].idx = i;
}
sort(t + 1, t + 1 + n, sapxep);
for (int i = 1; i < n; i++) {
int u, v;
cin >> u >> v;
a[u][v] = 1;
a[v][u] = 1;
}
int res = 0;
for (int i = 1; i <= n; i++) {
int check = 0;
for (int u = 1; u <= n; u++) {
if (!a[t[i].idx][u]) continue;
check = 1;
}
if (!check) continue;
for (int j = 1; j <= n; j++) {
if (!a[t[i].idx][j]) continue;
a[t[i].idx][j] = 0;
a[j][t[i].idx] = 0;
int ans1 = t[i].value;
int ru = 0;
for (int k = 1; k <= n; k++) {
if (j == t[k].idx) ru = t[k].value;
}
int ans2 = ru;
vector<bool> visited(n + 1, false);
dfs(t[i].idx, ans1, visited);
fill(visited.begin(),visited.end(),false);
visited.assign(n + 1, false);
dfs(j, ans2, visited);
res += ans1 + ans2;
}
}
cout << res << '\n';
}
int main() {
solve();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |