#include <bits/stdc++.h>
#define int long long
using namespace std;
int a[200005][45], par[200005], n, l, q;
vector<int> adj[200005];
void dfs(int u)
{
for (int v:adj[u])
{
if (v==par[u])
continue;
par[v]=u;
dfs(v);
}
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> l;
for (int i=1; i<n; i++)
{
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
for (int i=1; i<=n; i++)
cin >> a[i][0];
for (int i=1; i<=40; i++)
for (int j=1; j<=n; j++)
a[j][i]=1;
dfs(1);
cin >> q;
while (q--)
{
int t;
cin >> t;
if (t==1)
{
int x, d, w;
cin >> x >> d >> w;
for (int j=d; j>=0; j--)
{
a[x][j]=a[x][j]*w%l;
a[x][j-1]=a[x][j-1]*w%l;
if (x==1)
{
for (int k=j-2; k>=0; k--)
a[x][k]=a[x][k]*w%l;
break;
}
x=par[x];
}
}
else
{
int x, ans=1;
cin >> x;
for (int j=0; j<=40; j++)
{
ans=ans*a[x][j]%l;
if (x==1)
break;
x=par[x];
}
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... |