#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define pb push_back
const int N=2e5+5,inf=1e9,MOD=1e9+7;
int n,l,par[N],h[N],suff[N][42];
vector<int> adj[N];
void dfs(int node,int p){
par[node]=p;
for(auto i:adj[node]){
if(i!=p)dfs(i,node);
}
}
signed main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>n>>l;
for(int i=0;i<n-1;i++){
int x,y; cin>>x>>y;
adj[x].pb(y); adj[y].pb(x);
}
dfs(1,0);
for(int i=1;i<=n;i++){
cin>>h[i];
for(int j=0;j<42;j++)suff[i][j]=1;
}
int q; cin>>q;
while(q--){
int type; cin>>type;
if(type==1){
int x,d,w; cin>>x>>d>>w;
while(d>=0){
suff[x][d]*=w; suff[x][d]%=l;
d--;
if(d>=0){
suff[x][d]*=w; suff[x][d]%=l;
}
if(x!=1)x=par[x];
else d--;
}
}
else{
int x; cin>>x;
int ans=1,d=0;
while(x>0 && d<41){
ans*=suff[x][d]; ans%=l;
d++;
x=par[x];
}
cout<<ans<<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... |