#include <bits/stdc++.h>
using namespace std;
vector<long long> adj[200045];
long long par[200045];
long long h[200045];
void dfs(long long u,long long p){
for(long long next:adj[u]){
if(next==p){
continue;
}
par[next]=u;
dfs(next,u);
}
}
int main(){
long long n,mod;
cin>>n>>mod;
for (long long i = 1; i <= n-1; i++)
{
long long u,v;
cin>>u>>v;
adj[u].push_back(v);
adj[v].push_back(u);
}
for (long long i = 1; i <= n; i++)
{
cin>>h[i];
}
long long dp[n+45][45];
memset(dp,1,sizeof(dp));
for (long long i = 1; i <=40; i++)
{
adj[i+n].push_back(i+n-1);
adj[i+n-1].push_back(i+n);
}
dfs(n+40,0);
long long q;
cin>>q;
while(q--){
long long jenis;
cin>>jenis;
if(jenis==1){
long long x,d,w;
cin>>x>>d>>w;
while (x!=0 && d>=0)
{
dp[x][d]*=w;
dp[x][d]%=mod;
d--;
if(d>=0){
dp[x][d]*=w;
dp[x][d]%=mod;
}
x=par[x];
}
}else{
long long x;
long long d=0;
cin>>x;
long long res=h[x];
while(x!=0 && d<=40){
res*=dp[x][d];
res%=mod;
d++;
x=par[x];
}
cout<<res<<endl;
}
}
}
# | 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... |