#include<iostream>
#include<vector>
#include<stack>
using namespace std;
int cena(int pocetak,vector<vector<int>> veze,vector<int>z){
stack<int> s;
vector<bool> poseceni(veze.size(),false);
s.push(pocetak);
poseceni[pocetak]=true;
vector<int> udaljenost(veze.size(),0);
unsigned int br=0,i=0;
while(!s.empty()){
    unsigned int k=s.top();
    s.pop();
    for(auto x:veze[k]){
        if(!poseceni[x]){
            s.push(x);
           udaljenost[x]=udaljenost[k]+1;
           poseceni[x]=true;
        }
    }
}
for(i=0;i<udaljenost.size();i++){
    if(i!=pocetak){br+=(udaljenost[i]*z[i]);
    }
}
return br;
}
int minimalni(int n,vector<vector<int>> veze,vector<int> z){
unsigned int i=0,br=0;
int m=cena(0,veze,z);
for(i=1;i<n;i++){
    if(m>cena(i,veze,z)){
        m=cena(i,veze,z);
        br=i;
    }
}
return br+1;
}
int main(){
std::ios_base::sync_with_stdio(false);
cin.tie(NULL);
unsigned n,i=0;
cin>>n;
vector<vector<int>> a(n);
vector<int> z;
for(i=0;i<n-1;i++){
    unsigned int x,y;
    cin>>x>>y;
    x--;y--;
    a[x].push_back(y);
    a[y].push_back(x);
}
for(i=0;i<n;i++){
    unsigned x;
    cin>>x;
    z.push_back(x);
}
cout<<minimalni(n,a,z)<<"\n";
unsigned int q;
cin>>q;
for(i=0;i<q;i++){
    unsigned int x,y;
    cin>>x>>y;
    y--;
    z[y]+=x;
    cout<<minimalni(n,a,z)<<"\n";
}
return 0;
}