#include<bits/stdc++.h>
using namespace std;
#define task "a"
#define se second
#define fi first
#define ll long long
#define ii pair<ll, ll>
const long mxN = 2e5 + 7;
int n, MOD, par[mxN], h[mxN];
ll mem[mxN][50];
vector<int> w[mxN];
void Build(int j)
{
for (int i : w[j])
{
if (i == par[j])
continue;
par[i] = j;
Build(i);
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//freopen(task".INP", "r", stdin);
//freopen(task".OUT", "w", stdout);
cin >> n >> MOD;
for (int i = 1; i < n; i++)
{
int u, v;
cin >> u >> v;
w[u].push_back(v);
w[v].push_back(u);
}
Build(1);
for (int i = 1; i <= n; i++)
{
cin >> h[i];
for (int j = 0; j <= 41; j++)
mem[i][j] = 1;
}
int q;
cin >> q;
for (int i = 1; i <= q; i++)
{
int tt, ver;
cin >> tt >> ver;
if (tt == 1)
{
int dis, mul;
cin >> dis >> mul;
while (ver && dis >= 0)
{
mem[ver][dis] = mem[ver][dis] * mul % MOD;
dis--;
ver = par[ver];
}
}
else
{
int dis = 0;
ll ans = h[ver];
while (dis <= 40)
{
ans = ans * mem[ver][dis] % MOD;
if (ver != 1)
{
ans = ans * mem[ver][dis + 1] % MOD;
ver = par[ver];
}
dis++;
}
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... |