/**
* author: tourist
* created: 21.04.2025 10:06:09
**/
#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#include "algo/debug.h"
#else
#define debug(...) 42
#endif
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
long long l;
cin >> l;
vector<vector<int>> g(n);
for (int i = 0; i < n - 1; i++) {
int u, v;
cin >> u >> v;
--u; --v;
g[u].push_back(v);
g[v].push_back(u);
}
vector<int> pv(n);
auto Dfs = [&](auto&& self, int v, int pr) -> void {
pv[v] = pr;
for (int u : g[v]) {
if (u != pr) {
self(self, u, v);
}
}
};
Dfs(Dfs, 0, -1);
vector<int> h(n);
for (int i = 0; i < n; i++) {
cin >> h[i];
}
vector<vector<int64_t>> lazy(n, vector<int64_t>(41, 1));
int q;
cin >> q;
for (int qq = 0; qq < q; qq++) {
int op;
cin >> op;
if (op == 1) {
int x, d, w;
cin >> x >> d >> w;
int orig_d = d;
--x;
for (int j = 0; j <= orig_d; j++) {
lazy[x][d] *= int64_t(w);
lazy[x][d] %= l;
if (d >= 1) {
lazy[x][d - 1] *= int64_t(w);
lazy[x][d - 1] %= l;
}
if (x == 0) {
for (int i = 0; i < d - 1; i++) {
lazy[x][i] *= int64_t(w);
lazy[x][i] %= l;
}
}
if (x > 0) {
x = pv[x];
--d;
} else {
break;
}
}
} else {
int x;
cin >> x;
--x;
int64_t ans = h[x];
for (int j = 0; j <= 40; j++) {
ans *= lazy[x][j];
ans %= l;
if (pv[x] == -1) {
break;
}
x = pv[x];
}
cout << ans << '\n';
}
}
return 0;
}
# | 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... |