#include <bits/stdc++.h>
#define rep(i, n)	for(ll i=0;i<(ll)(n);i++)
#define ALL(a)	(a).begin(),(a).end()
using namespace std;
using ll=long long;
typedef pair<ll,ll> P;

ll n,q;
vector<vector<ll>> G;
vector<P> edge;

int main(){
    cin>>n;
    G.resize(n);
    edge.resize(n-1);
    rep(i,n-1){
        ll a,b;
        cin>>a>>b;
        a--;b--;
        G[a].push_back(b);
        G[b].push_back(a);
        edge[i]={a,b};
    }
    vector<ll> depth(n,-1);
    depth[0]=0;
    queue<ll> que;
    que.push(0);
    while(!que.empty()){
        ll v=que.front(); que.pop();
        for(auto x:G[v]){
            if(depth[x]==-1){
                depth[x]=depth[v]+1;
                que.push(x);
            }
        }
    }
    vector<ll> s(n);
    cin>>q;
    rep(i,q){
        ll t,e,x;
        cin>>t>>e>>x;
        e--;
        ll a=edge[e].first,b=edge[e].second;
        if(t==1){
            if(depth[a]<depth[b]){
                s[0]+=x;
                s[b]-=x;
            }else{
                s[a]+=x;
            }
        }else{
            if(depth[a]>depth[b]){
                s[0]+=x;
                s[a]-=x;
            }else{
                s[b]+=x;
            }
        }
    }
    que.push(0);
    while(!que.empty()){
        ll v=que.front(); que.pop();
        for(auto x:G[v]){
            if(depth[x]>depth[v]){
                s[x]+=s[v];
                que.push(x);
            }
        }
    }
    rep(i,n) cout<<s[i]<<endl;
}
#include<bits/stdc++.h>
#define int long long
using namespace std;

const int N = 17;
const int mod = 1e9+ 7;

int dp[(1<<N)][N];

int fx(vector<array<int,3>>&v, int mask , int last ){
    
    if(dp[mask][last] != -1){
      return dp[mask][last];
    }

    int n = v.size();
    
    if(mask == ((1<<n) -1)){
      
      int c = 0;
       for(int j =0;j<3;j++){
              
          if(j == 2){
             c += max(0LL,v[last][j] - v[0][j]);
          }else{
             c += abs(v[last][j] - v[0][j]);
          }
              
        }

       return c;
    }
    
    int ans = INT_MAX;

    for(int i = 1; i < n ; i ++){
       if( (mask&(1<<i)) == 0){
            int c = 0;
            for(int j =0;j<3;j++){
              
              if(j == 2){
                 c += max(0LL,v[last][j] - v[i][j]);
              }else{
                 c += abs(v[last][j] - v[i][j]);
              }
                  
            }

            
            int nca = c + fx(v,mask|(1 << i) ,i);          
            ans = min(ans,nca);

       }
    }

    return (dp[mask][last] = ans);
}

signed main(){

  int n;
  cin>>n;
  
  vector<array<int,3>>v;

  for(int i=0;i<n;i++){
    int x,y,z;
    cin>>x>>y>>z;
    v.push_back({x,y,z});
  }
  
  for(int i=0;i<(1<<n);i++){
      for(int j=0;j<n;j++){
          dp[i][j] = -1;
      }
  }

  int ans = fx(v,1,0);
  cout<<ans<<endl;

  return 0;
}



// //
// n = 2;
// 1 2 3 4 5 ... n

// (1+2) / 2 = > 1

// n = 3
// 1 2 3 

// (1+3)/2 => 2
// (2+2)/2 => 2

// n= 4
// ()

// 1 3 3
// 2 3

// 1 2 3
// 1 3
// 2

// 1 2 3 4 
// 1 2 4
// 1 3
// 2


