#include <bits/stdc++.h>
#define GO_BEYOND ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define ll long long
#define fi first
#define se second
#define pll pair<ll, ll>
#define plll pair<ll,pll>
using namespace std;
const ll MAXN=2e5;
vector<ll> h(MAXN+1);
vector<ll> parent(MAXN+1, 0LL); // kita bikin tree aja
vector<vector<ll>> anu(MAXN+1, vector<ll>(41LL, 1LL));
vector<bool> vis(MAXN+1, 0);
vector<ll> edge[MAXN+5];
ll n, l;
void maketree(ll x, ll par){
vis[x]=1;
parent[x]=par;
for(auto u: edge[x]){
if(!vis[u])
maketree(u, x);
}
}
void update(ll x, ll d, ll w){
anu[x][d]=(anu[x][d]*w)%l;
if(d<=0) return;
// pastikan childnya yang dist odd bisa berpotongan dengannya
if(x!=0) anu[x][d-1]=(anu[x][d-1]*w)%l;
// cout << x << ' ' << d << ' ' << anu[x][d] << " UPDET" << endl;
update(parent[x], d-1, w);
}
ll query(ll x, ll d){
if(d>40) return 1;
if(x==0) return anu[x][d];
// cout << x << ' ' << d << ' ' << anu[x][d] << " HMZ" << endl;
ll ret=(anu[x][d]*query(parent[x], d+1))%l;
return ret;
}
void solve(){
cin >> n >> l;
ll u, v;
for(int i=1; i<n; i++){
cin >> u >> v;
edge[u].push_back(v);
edge[v].push_back(u);
}
maketree(1, 0);
for(int i=1; i<=n; i++)
cin >> h[i];
ll q; cin >> q;
ll x, d, w, t;
vector<ll> ans;
while(q--){
cin >> t;
if(t==1){
cin >> x >> d >> w;
update(x, d, w);
// cout << "WOW" << endl;
}else{
cin >> x;
ll koef=query(x, 0);
// cout << koef << " HUH" << endl;
ans.push_back((koef*h[x])%l);
}
}
for(auto x: ans)
cout << x << endl;
}
/*
g++ sigma.cpp -o a
2 5
1 2
3
1
2
1 1 0 4
2 1
4 7
1 2
2 3
3 4
1
1
1
1
11
1 2 1 2
1 1 0 2
2 1
2 2
2 3
2 4
1 4 10 2
2 1
2 2
2 3
2 4
6 10
5 6
1 2
1 4
2 6
3 6
9
2
3
4
9
1
10
1 5 1 7
2 4
1 4 1 9
1 5 0 7
2 1
1 1 1 3
1 6 1 4
2 5
2 4
2 3
*/
int main(){
GO_BEYOND;
ll t=1;
// cin >> t;
while(t--)
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... |