#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define mp make_pair
using namespace std;
const int maxn=(int)2e5+10;
int n,r;
vector<pair<int,int>>a[maxn]; //indeks, tezina
int w[maxn];
ll sol[maxn];
static bool visited[maxn];
static int d[maxn];
void bfs(int node)
{
    queue<int>q;
    q.push(node);
    visited[node]=true;
    while (!q.empty())
    {
        int v=q.front();
        q.pop();
        for (auto p: a[v])
        {
            if (visited[p.first])
                continue;
            visited[p.first]=true;
            q.push(p.first);
            d[p.first]=d[v]+1;
            sol[node]+=d[p.first]*p.second;
        }
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin >> n;
    for (int i=0; i<n-1; i++)
    {
        int x,y;
        cin >> x >> y;
        a[x].pb(mp(y,0));
        a[y].pb(mp(x,0));
    }
    for (int i=1; i<=n; i++)
        cin >> w[i];
    for (int i=1; i<=n; i++)
        for (int j=0; j<(int)a[i].size(); j++)
            a[i][j].second=w[a[i][j].first];
    cin >> r;
    bool t=false;
    int s,z;
    do
    {
        for (int i=1; i<=n; i++)
            sol[i]=0LL;
        if (t)
        {
            cin >> s >> z; //broj, indeks
            for (int i=1; i<=n; i++)
                for (int j=0; j<(int)a[i].size(); j++)
                    if (a[i][j].first==z)
                        a[i][j].second+=s;
        }
        t=true;
        for (int i=1; i<=n; i++)
        {
            for (int j=1; j<=n; j++)
            {
                visited[j]=false;
                d[j]=0;
            }
            bfs(i);
        }
        int res=sol[1];
        int ind=1;
        for (int i=2; i<=n; i++)
            if (res>sol[i])
            {
                res=sol[i];
                ind=i;
            }
        cout << ind << "\n";
    }
    while (r--);
    return 0;
}