#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 2e5 + 69;
vector<int> g[maxn];
int mod;
int h[maxn], par[maxn];
int f[maxn][100];
void dfs(int u){
for(int v: g[u]){
if(v != par[u]){
par[v] = u;
dfs(v);
}
}
}
void solve(){
int n; cin >> n >> mod;
for(int i = 1; i <= n - 1; i++){
int u, v; cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
for(int i = 1; i <= n; i++) cin >> h[i];
for(int i = n + 1; i <= n + 40; i++) g[i].push_back(i + 1);
g[n + 41].push_back(1);
dfs(n + 1);
for(int i = 0; i < maxn; i++){
for(int j = 0; j < 100; j++) f[i][j] = 1;
}
int q; cin >> q;
while(q--){
int type; cin >> type;
if(type == 1){
int u, d, w; cin >> u >> d >> w;
while(d >= 0){
f[u][d] = (f[u][d] *= w) %= mod;
if(d && u) f[u][d - 1] = (f[u][d - 1] *= w) %= mod;
u = par[u];
d--;
}
}
else{
int u; cin >> u;
int res = h[u];
for (int d = 0; d <= 40; d++) res = (res * f[u][d]) % mod, u = par[u];
cout << res << "\n";
}
}
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |