using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Zlatnici
{
    internal class Program
    {
        static bool SadrziVezu(long[] niz, long i)
        {
            for (int j = 0; j < niz.Length; j++)
            {
                if (niz[j] == i) return true;
            }
            return false;
        }
        static void IspisNiza(long[] niz)
        {
            for (int i = 0; i < niz.Length; i++)
            {
                Console.WriteLine(niz[i]);
            }
        }
        static long[] PoslePrebacivanja(long[] pocetniZlatnici, long N, long[,] portali)
        {
            long[] prebaceniZlatnici = pocetniZlatnici;
            for (int i = 0; i < pocetniZlatnici.Length; i++)
            {
                prebaceniZlatnici[i] = pocetniZlatnici[i];
            }
            long[] prebacivanje = new long[N];
            for (int t = 0; t < N; t++)
            {
                long prebacivanjei = 0;
                for (int s = 0; s < N && s != t; s++)
                {
                    long[] vezei = new long[N];
                    int brojac = 0;
                    for (int y = 0; y < portali.GetLength(0); y++)
                    {
                        if (portali[y, 0] == s + 1)
                        {
                            if (!SadrziVezu(vezei, portali[y, 1]))
                            {
                                vezei[brojac] = portali[y, 1];
                                brojac++;
                            }
                        }
                        else if (portali[y, 1] == s + 1)
                        {
                            if (!SadrziVezu(vezei, portali[y, 0]))
                            {
                                vezei[brojac] = portali[y, 0];
                                brojac++;
                            }
                        }
                    }
                    Array.Resize(ref vezei, brojac);
                    int minimum = 0;
                    int maksimum = 0;
                    if (s < t)
                    {
                        for (int u = 0; u < vezei.Length; u++)
                        {
                            if (vezei[u] > maksimum + 1) maksimum = u;
                        }
                        prebaceniZlatnici[maksimum] += prebaceniZlatnici[s];

                    }
                    else
                    {
                        for (int u = 0; u < vezei.Length; u++)
                        {
                            if (vezei[u] < minimum + 1) minimum = u;
                        }
                        prebaceniZlatnici[minimum] += prebaceniZlatnici[s];
                    }
                    prebacivanjei += prebaceniZlatnici[s];
                    prebaceniZlatnici[s] = 0;
                }
                prebacivanje[t] += prebacivanjei;
            }
            return prebacivanje;
        }
        static void Main(string[] args)
        {
            long N = long.Parse(Console.ReadLine());
            long[,] portali = new long[N - 1, 2];
            string[] unos;
            for (int i = 0; i < N - 1; i++)
            {
                unos = Console.ReadLine().Split();
                portali[i, 0] = long.Parse(unos[0]);
                portali[i, 1] = long.Parse(unos[1]);
            }
            long[] pocetniZlatnici = new long[N];
            unos = Console.ReadLine().Split();
            for (int i = 0; i < N; i++)
            {
                pocetniZlatnici[i] = long.Parse(unos[i]);
            }
            long Q = long.Parse(Console.ReadLine());
            long[,] dodaci = new long[Q, 2];
            for (int i = 0; i < Q; i++)
            {
                unos = Console.ReadLine().Split();
                dodaci[i, 0] = long.Parse(unos[0]);
                dodaci[i, 1] = long.Parse(unos[1]);
            }
            long[] optimalneBanke = new long[Q + 1];
            long[] prebacivanje = PoslePrebacivanja(pocetniZlatnici, N, portali);


            long min = long.MaxValue;
            int a = 0;
            for (int i = 0; i < prebacivanje.Length; i++)
            {
                if (prebacivanje[i] < min) { min = prebacivanje[i]; a = i; }
            }
            optimalneBanke[0] = a + 1;

            for (int i = 0; i < dodaci.GetLength(0); i++)
            {
                pocetniZlatnici[dodaci[i, 1] - 1] += dodaci[i, 0];
                prebacivanje = PoslePrebacivanja(pocetniZlatnici, N, portali);
                for (int j = 0; j < prebacivanje.Length; j++)
                {
                    if (prebacivanje[j] < min) { min = prebacivanje[j]; a = j; }
                }
                optimalneBanke[i] = a + 1;
            }

            IspisNiza(optimalneBanke);
        }
    }
}