#include <bits/stdc++.h>

using namespace std;

#define all(x) (x).begin(), (x).end()
#define fast ios::sync_with_stdio(false);cin.tie(0);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

vector<int> dsu,sz,rnk;
vector<vector<pair<int,int>>> g;
vector<int> color;

void init(int n,int x){
	dsu = sz = rnk = vector<int> (n+x);
	iota(dsu.begin()+x,dsu.end(),x);
	fill(sz.begin(),sz.end(),1);
}

int find(int u){
	return u == dsu[u] ? u : dsu[u] = find(dsu[u]);
}

void merge(int u,int v){
	u = find(u);
	v = find(v);
	if(u == v)return;
	if(sz[u] < sz[v])swap(u,v); // enable for fast dsu
	// if(rnk[u] > rnk[v])swap(u,v);
	sz[u] += sz[v];
	rnk[v] = rnk[u] + 1;
	dsu[v] = u;
}

set<int> st;

void dfs(int u,int p,int t){
	if(t == -1){
		for(pair<int,int> c : g[u])st.erase(c.second);
		color[u] = *st.begin();
		for(pair<int,int> c : g[u])st.insert(c.second);
	}else{
		color[u] = t;
	}
	// cerr << u << ' ' << p << ' ' << t << '\n';

	for(pair<int,int> c : g[u]){
		int v = c.first;
		int w = c.second;
		if(v == p)continue;
		if(w == color[u])dfs(v,u,-1);
		else dfs(v,u,w);
	}

}

int main(){
	fast
	int n,m;
	cin>>n>>m;
	color.resize(n);
	for(int i=1;i<=n;i++)st.insert(i);
	g.resize(n);
	init(n,0);
	for(int i=0;i<m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		u--;v--;
		if(find(u) != find(v)){
			g[u].push_back({v,w});
			g[v].push_back({u,w});
			// cerr << u << ' ' << v << '\n';
			merge(u,v);
		}
	}
	dfs(0,-1,-1);
	for(int c : color)
		cout << c << '\n';
}
#include<bits/stdc++.h>
#define int long long
using namespace std;

const int N=2e5+5;
const int LOGN=log2(N+10)+1;

int depth[N+1], a[N], b[N], delta[N], ans[N];

int parent[LOGN][N];
vector<int>edges[N];
int n;

void init(int n){
    for(int bit=0;bit<LOGN;bit++){
        for(int i=0;i<n;i++){
            parent[bit][i]=-1;
        }
    }
}

void dfs(int s,int p,int dep){
    depth[s]=dep;
    parent[0][s]=p;
    for(int bit=1;bit<LOGN;bit++){
        if(parent[bit-1][s]!=-1){
            parent[bit][s]=parent[bit-1][parent[bit-1][s]];
        }
    }
    for(auto x:edges[s]){
        if(x==p)    continue;
        dfs(x,s,dep+1);
    }
}

int lca(int u,int v){
    if(depth[u]<depth[v]) swap(u,v);
    int diff=depth[u]-depth[v];
    for(int bit=0;bit<LOGN;bit++) if((diff>>bit)&1) u=parent[bit][u];
    if(u==v) return u;
    for(int bit=LOGN-1;bit>=0;bit--) 
        if(parent[bit][u]!=parent[bit][v]) {
            u=parent[bit][u];
            v=parent[bit][v];
        }
    return parent[0][u];
}

int dist(int a,int b){
    int c=lca(a,b);
    return depth[a]+depth[b]-2*depth[c];
}

int getNode(int a,int dist){
    for(int bit=0;bit<LOGN;bit++){
        if(dist&(1ll<<bit)){
            a=parent[bit][a];
        }
    }
    return a;
}


void dfs2(int s,int p,int change){
	ans[s]=delta[s]+change;
	for(auto x:edges[s]){
		if(x==p)	continue;
		dfs2(x,s,change+delta[s]);	
	}
}

void solve(){
	cin>>n;
	init(n);
	for(int i=0;i+1<n;i++){
		cin>>a[i]>>b[i];
		a[i]--;b[i]--;
		edges[a[i]].push_back(b[i]);
		edges[b[i]].push_back(a[i]);
	}	
	dfs(0,-1,0);

	int q;cin>>q;
	while(q--){
		int t,e,x;cin>>t>>e>>x;
		e--;

		int A=a[e], B=b[e];
		// cout<<A<<" "<<B<<"\n";
		if(t==2)	swap(A,B);

		// cout<<A<<" "<<B<<"\n";

		// Spcl Care
		if(lca(A,B)==B){
			// cout<<A<<" "<<B<<"\n";
			// cout<<"Coming Here\n";
			// delta[B]-=x;
			int node=getNode(A, dist(A, B)-1);
			delta[node]+=x;
			continue;
		}

		delta[B]-=x;
		// cout<<"B="<<B<<"\n";
		delta[0]+=x;
	}
	// for(int i=0;i<n;i++)	cout<<delta[i]<<" ";cout<<"\n";

	dfs2(0,-1,0);
	for(int i=0;i<n;i++)	cout<<ans[i]<<"\n";
}

main(){
    ios_base::sync_with_stdio(false);cin.tie(NULL);
    #ifndef ONLINE_JUDGE    
        freopen("input.txt","r",stdin);
        freopen("output.txt","w",stdout); 
    #endif
    solve();
}