#include using namespace std; #define int long long #define ii pair #define app push_back #define all(a) a.begin(), a.end() #define bp __builtin_popcountll #define ll long long #define mp make_pair #define f first #define s second #define Time (double)clock()/CLOCKS_PER_SEC #define debug(x) std::cout << #x << ": " << x << '\n'; const int N = 1e3+7; vector g[N]; int n, a[N], cnt[N], par[N]; bool del[N]; void dfs(int u, int p) { par[u] = p; for (int v : g[u]) { if (v != p) { dfs(v, u); } } } signed main() { #ifdef HOME freopen("input.txt", "r", stdin); #else #define endl '\n' ios_base::sync_with_stdio(0); cin.tie(0); #endif cin >> n; for (int i = 1; i <= n; ++i) cin >> a[i]; for (int i = 0; i < n - 1; ++i) { int u, v; cin >> u >> v; g[u].app(v); g[v].app(u); } dfs(1, 1); const int INF = 1e18; for (int i = 1; i <= n; ++i) cnt[i] = 1; for (int t = 0; t < n - 1; ++t) { ii mx = mp(-INF, -INF); for (int u = 2; u <= n; ++u) { if (!del[u]) { mx = max(mx, mp(a[u], u)); } } int u = mx.s; for (int i = 2; i <= n; ++i) { if (par[i] == u) { par[i] = par[u]; } } del[u] = 1; if (cnt[par[u]]&1) a[par[u]] -= a[u]; else a[par[u]] += a[u]; cnt[par[u]] += cnt[u]; } cout << a[1] << endl; }