#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 1e6 + 5;
struct Edge {
int u, v, w;
bool operator<(const Edge& other) const {
return w < other.w;
}
};
int n;
int w[N];
vector<Edge> edges;
struct dsu {
int n;
vector<int> p, sz;
dsu(int n): n(n) {
p.resize(n);
sz.resize(n);
for (int u = 1; u < n; u++) {
p[u] = u;
sz[u] = 1;
}
}
int findSet(int u) {
if (p[u] == u) return u;
return p[u] = findSet(p[u]);
}
ll unionSet(int u, int v) {
u = findSet(u);
v = findSet(v);
if (u == v) return 0;
if (sz[u] < sz[v]) swap(u, v);
ll cnt = 1ll * sz[u] * sz[v];
p[v] = u;
sz[u] += sz[v];
return cnt;
}
};
// tổng max - tổng min
// Có thể chuyển từ trọng số của đỉnh về trọng số của cạnh cho dễ đếm
// Cách đếm hoàn toàn tương tự với bài G. Path Queries
ll sumMax() {
vector<Edge> cur;
for (Edge e : edges) {
int cur_w = max(w[e.u], w[e.v]);
cur.push_back({e.u, e.v, cur_w});
}
sort(cur.begin(), cur.end());
ll ans = 0;
dsu DSU(n + 1);
for (Edge e : cur) {
ans += 1ll * e.w * DSU.unionSet(e.u, e.v);
}
return ans;
}
ll sumMin() {
vector<Edge> cur;
for (Edge e : edges) {
int cur_w = min(w[e.u], w[e.v]);
cur.push_back({e.u, e.v, cur_w});
}
sort(cur.rbegin(), cur.rend());
ll ans = 0;
dsu DSU(n + 1);
for (Edge e : cur) {
ans += 1ll * e.w * DSU.unionSet(e.u, e.v);
}
return ans;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (int u = 1; u <= n; u++) cin >> w[u];
for (int i = 0; i < n - 1; i++) {
int u, v;
cin >> u >> v;
edges.push_back({u, v, 0});
}
ll ans = sumMax() - sumMin();
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSAxZTYgKyA1OyAKCnN0cnVjdCBFZGdlIHsKCWludCB1LCB2LCB3OyAgCglib29sIG9wZXJhdG9yPChjb25zdCBFZGdlJiBvdGhlcikgY29uc3QgewoJCXJldHVybiB3IDwgb3RoZXIudzsgCgl9Cn07IAoKaW50IG47ICAKaW50IHdbTl07IAp2ZWN0b3I8RWRnZT4gZWRnZXM7IAoKc3RydWN0IGRzdSB7CglpbnQgbjsgIAoJdmVjdG9yPGludD4gcCwgc3o7ICAKCglkc3UoaW50IG4pOiBuKG4pIHsKCQlwLnJlc2l6ZShuKTsgCgkJc3oucmVzaXplKG4pOyAgCgkJZm9yIChpbnQgdSA9IDE7IHUgPCBuOyB1KyspIHsKCQkJcFt1XSA9IHU7ICAKCQkJc3pbdV0gPSAxOyAgCgkJfQoJfQoKCWludCBmaW5kU2V0KGludCB1KSB7CgkJaWYgKHBbdV0gPT0gdSkgcmV0dXJuIHU7IAoJCXJldHVybiBwW3VdID0gZmluZFNldChwW3VdKTsgCgl9CgoJbGwgdW5pb25TZXQoaW50IHUsIGludCB2KSB7CgkJdSA9IGZpbmRTZXQodSk7ICAKCQl2ID0gZmluZFNldCh2KTsgCgkJaWYgKHUgPT0gdikgcmV0dXJuIDA7ICAgCgkJaWYgKHN6W3VdIDwgc3pbdl0pIHN3YXAodSwgdik7IAoJCWxsIGNudCA9IDFsbCAqIHN6W3VdICogc3pbdl07IAoJCXBbdl0gPSB1OyAgCgkJc3pbdV0gKz0gc3pbdl07IAoJCXJldHVybiBjbnQ7IAoJfQp9OyAKCi8vIHThu5VuZyBtYXggLSB04buVbmcgbWluCi8vIEPDsyB0aOG7gyBjaHV54buDbiB04burIHRy4buNbmcgc+G7kSBj4bunYSDEkeG7iW5oIHbhu4EgdHLhu41uZyBz4buRIGPhu6dhIGPhuqFuaCBjaG8gZOG7hSDEkeG6v20KLy8gQ8OhY2ggxJHhur9tIGhvw6BuIHRvw6BuIHTGsMahbmcgdOG7sSB24bubaSBiw6BpIEcuIFBhdGggUXVlcmllcwoKbGwgc3VtTWF4KCkgewoJdmVjdG9yPEVkZ2U+IGN1cjsgIAoJZm9yIChFZGdlIGUgOiBlZGdlcykgewoJCWludCBjdXJfdyA9IG1heCh3W2UudV0sIHdbZS52XSk7IAoJCWN1ci5wdXNoX2JhY2soe2UudSwgZS52LCBjdXJfd30pOyAKCX0KCglzb3J0KGN1ci5iZWdpbigpLCBjdXIuZW5kKCkpOyAgCgoJbGwgYW5zID0gMDsgIAoJZHN1IERTVShuICsgMSk7IAoKCWZvciAoRWRnZSBlIDogY3VyKSB7CgkJYW5zICs9IDFsbCAqIGUudyAqIERTVS51bmlvblNldChlLnUsIGUudik7IAoJfQoKCXJldHVybiBhbnM7IAp9CgpsbCBzdW1NaW4oKSB7Cgl2ZWN0b3I8RWRnZT4gY3VyOyAgCglmb3IgKEVkZ2UgZSA6IGVkZ2VzKSB7CgkJaW50IGN1cl93ID0gbWluKHdbZS51XSwgd1tlLnZdKTsgCgkJY3VyLnB1c2hfYmFjayh7ZS51LCBlLnYsIGN1cl93fSk7IAoJfQoKCXNvcnQoY3VyLnJiZWdpbigpLCBjdXIucmVuZCgpKTsgIAoKCWxsIGFucyA9IDA7ICAKCWRzdSBEU1UobiArIDEpOyAKCglmb3IgKEVkZ2UgZSA6IGN1cikgewoJCWFucyArPSAxbGwgKiBlLncgKiBEU1UudW5pb25TZXQoZS51LCBlLnYpOyAKCX0KCglyZXR1cm4gYW5zOyAKfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgCQoJY2luID4+IG47IAkKCWZvciAoaW50IHUgPSAxOyB1IDw9IG47IHUrKykgY2luID4+IHdbdV07IAoKCWZvciAoaW50IGkgPSAwOyBpIDwgbiAtIDE7IGkrKykgewoJCWludCB1LCB2OyAKCQljaW4gPj4gdSA+PiB2OyAKCQllZGdlcy5wdXNoX2JhY2soe3UsIHYsIDB9KTsgCgl9CgoJbGwgYW5zID0gc3VtTWF4KCkgLSBzdW1NaW4oKTsgCgoJY291dCA8PCBhbnMgPDwgJ1xuJzsgCn0K