#include <bits/stdc++.h>
using namespace std;
#define ll long long
// #define int ll
#define FOR(i, a, b) for (int i = (a); i < (b); i++)
#define REP(i, n) FOR(i, 0, n)
#define REP1(i, n) FOR(i, 1, n+1)
#define RREP(i, n) for (int i = (n)-1; i >= 0; i--)
#define pii pair<int, int>
#define f first
#define s second
#define ALL(x) (x).begin(), (x).end()
#define SZ(x) (int)((x).size())
#define pb push_back
#define endl '\n'
#define IOS() ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
const ll maxn = 2e5+45;
const int mxdis = 40;
int n, mod, q;
int phi;
vector<int> g[maxn];
vector<int> H(maxn), par(maxn);
ll pw(ll a, ll p){
ll ret = 1;
while(p > 0){
if (p & 1){
ret *= a;
ret %= mod;
}
a *= a;
a %= mod;
p >>= 1;
}
return ret;
}
ll inv(ll a){
return pw(a, phi-1);
}
void dfs(int u, int pre){
par[u] = pre;
for (auto v:g[u]){
if (v == pre) continue;
dfs(v, u);
}
}
int dp[maxn][mxdis+5]; // enumerate lca of path, if dis(a, b) <= D_a, then some point higher = D_a or D_a-1
void modify(int U, int D, int W){
REP(i, D+1){
dp[U][D-i] = ((ll)(dp[U][D-i]) * W)%mod;
if (D-i-1 >= 0) dp[U][D-i-1] = ((ll)(dp[U][D-i-1]) * W)%mod;
U = par[U];
}
}
int query(int U){
ll A = H[U];
REP(i, mxdis+1){
A = (A * dp[U][i])%mod;
U = par[U];
}
return A;
}
signed main(){
IOS();
cin>>n>>mod;
REP(i, n-1){
int u, v; cin>>u>>v;
g[u].pb(v); g[v].pb(u);
}
REP(i, maxn) REP(j, mxdis+5) dp[i][j] = 1;
FOR(i, n+1, n+mxdis+1){
g[i-1].pb(i);
g[i].pb(i-1);
}
int rt = n+mxdis;
REP1(i, n) cin>>H[i];
dfs(rt, -1);
cin>>q;
REP(i, q){
int t; cin>>t;
if (t == 1){
int a, b, c; cin>>a>>b>>c;
modify(a, b, c);
}
else{
int x; cin>>x;
cout<<query(x)<<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... |