#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll N,Q,rez,u1,u2,vred[200005],rod[200005],suma[200005],podstablo[200005],cena[200005];
vector<ll> stablo[200005];
ll saberi(ll gde,int pret){
   rod[gde]=pret;
   suma[gde]=vred[gde];
   for(int i=0;i<stablo[gde].size();i++){
      if(stablo[gde][i]==pret)
         continue;
      suma[gde]+=saberi(stablo[gde][i],gde);
   }
   return suma[gde];
}
ll oddole(int gde,int pret){
   podstablo[gde]=0;
   for(int i=0;i<stablo[gde].size();i++){
      if(stablo[gde][i]==pret)
         continue;
      podstablo[gde]+=oddole(stablo[gde][i],gde);
      podstablo[gde]+=suma[stablo[gde][i]];
   }
   return podstablo[gde];
}
void nadji(int gde,int pret){
   if(gde==1){
      cena[gde]=podstablo[gde];
   }
   else{
      cena[gde]=cena[pret];
      cena[gde]-=suma[gde];
      cena[gde]+=suma[1]-suma[gde];
   }
   for(int i=0;i<stablo[gde].size();i++){
      if(stablo[gde][i]==pret)
         continue;
      nadji(stablo[gde][i],gde);
   }
   return;
}
void dodaj(int gde,ll kol){
   suma[gde]+=kol;
   podstablo[gde]=0;
   for(int i=0;i<stablo[gde].size();i++){
      if(stablo[gde][i]==rod[gde])
         continue;
      podstablo[gde]+=podstablo[stablo[gde][i]];
      podstablo[gde]+=suma[stablo[gde][i]];
   }
   if(gde==1)
      return;
   dodaj(rod[gde],kol);
   return;
}
void update(int gde){
   if(gde!=1)
      update(rod[gde]);
   if(gde==1){
      cena[gde]=podstablo[gde];
   }
   else{
      cena[gde]=cena[rod[gde]];
      cena[gde]-=suma[gde];
      cena[gde]+=suma[1]-suma[gde];
   }
}
void najbolji(int gde){
   if(cena[gde]<cena[rez] or (cena[gde]==cena[rez] and gde<rez))
      rez=gde;
   if(gde==1)
      return;
   najbolji(rod[gde]);
   return;
}
int main(){
   //freopen("Input.txt","r",stdin);
   ios_base::sync_with_stdio(false);
   cin>>N;
   for(int i=1;i<N;i++){
      cin>>u1>>u2;
      stablo[u1].push_back(u2);
      stablo[u2].push_back(u1);
   }
   for(int i=1;i<=N;i++)
      cin>>vred[i];
   /// 1 je root
   saberi(1,0);
   oddole(1,0);
   nadji(1,0);
   rez=1;
   for(int i=2;i<=N;i++)
      if(cena[i]<cena[rez])
         rez=i;
   cout<<rez<<"\n";

   cin>>Q;
   while(Q--){
      cin>>u1>>u2;
      dodaj(u2,u1);
      int p1=u2,p2=rez;
      update(p1);
      update(p2);
      najbolji(p1);
      najbolji(p2);
      cout<<rez<<"\n";
   }
   return 0;
}