#include #include #include #include using namespace std; typedef pair P; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N; cin >> N; vector a(N), b(N); for(int i = 0; i < N; i++) cin >> a[i]; for(int i = 0; i < N; i++) cin >> b[i]; vector G[N]; for(int i = 0; i < N - 1; i++){ int u, v; cin >> u >> v; u--; v--; G[u].push_back(v); G[v].push_back(u); } vector size(N); for(int i = 0; i < N; i++){ size[i] = G[i].size(); } vector used(N, 0); vector score(N, 0); long long sum = 0; for(int i = 0; i < N; i++){ score[i] = size[i] * b[i]; sum += score[i]; for(int j: G[i]) score[i] += b[j]; } priority_queue

pq; for(int i = 0; i < N; i++){ score[i] = a[i] - score[i]; if(score[i] > 0) pq.push(P(score[i], i)); } while(!pq.empty()){ P v = pq.top(); pq.pop(); long long temp = v.first; int ind = v.second; if(used[ind] == 1) continue; used[ind] = 1; sum += temp; for(int j: G[ind]){ score[j] += b[ind]; if(score[j] > 0 && used[j] == 0) pq.push(P(score[j], j)); } } cout << sum << endl; }