//#pragma GCC optimize("O2")
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
const ll N = 3e5 + 5;
const ll inf = LLONG_MAX/5;
#define bit(x,y) ((x >> y) & 1LL)
ll n,mod;
ll mul[50][N],h[N],p[N];
vector<ll> a[N];
void build(ll x, ll px)
{
for(auto y : a[x])
{
if(y == px) continue;
p[y] = x;
build(y,x);
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> mod;
ll i,j;
for(i = 1;i < n;i++)
{
ll u,v;
cin >> u >> v;
a[u].push_back(v);
a[v].push_back(u);
}
for(i = n + 40;i >= n + 2;i--)
{
a[i].push_back(i - 1);
a[i - 1].push_back(i);
}
a[n + 1].push_back(1);
a[1].push_back(n + 1);
build(n + 40,0);
for(i = 1;i <= n;i++) cin >> h[i];
for(i = 0;i <= 40;i++)
{
for(j = 1;j <= n + 40;j++) mul[i][j] = 1;
}
ll q;
cin >> q;
for(i = 1;i <= q;i++)
{
ll qr;
cin >> qr;
if(qr == 1)
{
ll x,d,w;
cin >> x >> d >> w;
ll i,j;
while(x != 0 && d >= 0)
{
mul[d][x] *= w;
mul[d][x] %= mod;
d--;
if(d >= 0)
{
mul[d][x] *= w;
mul[d][x] %= mod;
}
x = p[x];
}
}else
{
ll x;
cin >> x;
ll ans = h[x];
ll d = 0;
while(x != 0 && d <= 40)
{
ans *= mul[d][x];
ans %= mod;
x = p[x];
d++;
}
cout << ans << "\n";
}
}
}
# | 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... |