#include <iostream>
#include <vector>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;

struct Folyoso {
  int udvarig;
  int magassagKulonbseg;
  Folyoso(int udvarig_, int magassagKulonbseg_) {
    udvarig = udvarig_;
    magassagKulonbseg = magassagKulonbseg_;
  }
};

int minMagassagDFS(int terem, int magassag,
                 const vector<vector<Folyoso>>& folyosok)
{
  int minMagassag = magassag;
  for (const Folyoso& f : folyosok[terem])
  {
    int m = minMagassagDFS(f.udvarig, magassag + f.magassagKulonbseg, folyosok);
      if (m < minMagassag)
        minMagassag = m;
  }
  return minMagassag;
}

int main()
{
long long int i,j, n,q;
    cin>>n;
long long int x[n],y[n],kovisor[n+1];
vector<vector< Folyoso>> folyosok(n+1); //kapcsolati vektor

    for(i=1;i<n;i++)
        {
            cin>>x[i]>>y[i];

        }
    for(i=1;i<=n;i++)
        cin>>kovisor[i];


        for(i=1;i<n;i++)
    {
        int a,b,magassagKulonbseg;
        a=x[i];
        b=y[i];
        magassagKulonbseg=kovisor[i];
        folyosok[a].push_back(Folyoso(b, magassagKulonbseg));
    }

    cout << "Hello world!" << endl;
     cout<<minMagassagDFS(1,n, folyosok) << endl;


        cout<<"Q"<<endl;
    cin>>q;
long long int z[q],b[q],ki[q+1];
    for(i=0;i<q;i++)
       {
            cin>>z[i]>>b[i];
            kovisor[b[i]]=kovisor[i]+z[i];
            for(j=1;j<n;j++)
    {
        int a,b,magassagKulonbseg;
        a=x[j];
        b=y[j];
        magassagKulonbseg=kovisor[j];
        folyosok[a].push_back(Folyoso(b, magassagKulonbseg));
    }

    cout << "Hello world!" << endl;
     cout<<minMagassagDFS(1,n , folyosok) << endl;
       }

    return 0;
}