This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 200045;
const int K = 45;
int n, l, q, h[N], val[N][K], pa[N], dep[N];
vector<int> adj[N];
void dfs(int u, int p) {
for (int v : adj[u]) if (v != p) {
dep[v] = dep[u] + 1;
pa[v] = u, dfs(v, u);
}
}
int32_t main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n >> l;
for (int i = 0; i < N; i++) for (int j = 0; j < K; j++) val[i][j] = 1;
for (int i = 1; i < n; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
pa[1] = 0;
for (int i = n + 1; i <= n + 39; i++) {
adj[i].push_back(i + 1);
adj[i + 1].push_back(i);
}
adj[n + 40].push_back(1);
adj[1].push_back(n + 40);
dfs(n + 1, -1);
for (int i = 1; i <= n; i++) cin >> h[i];
cin >> q;
while (q--) {
int ty;
cin >> ty;
if (ty == 1) {
int u, d, w;
cin >> u >> d >> w;
d = min(d, dep[u]);
vector<int> tr;
for (int j = 0; j <= d; j++) tr.push_back(u), u = pa[u];
reverse(tr.begin(), tr.end());
int dp = 0;
val[tr[0]][0] = (val[tr[0]][0] * w) % l;
// cout << "upd " << tr[0] << " " << 0 << " " << w << "\n";
for (auto x : tr) {
if (x == tr[0]) continue;
// cout << "x: " << x << '\n';
val[x][dp] = (val[x][dp] * w) % l;
val[x][dp + 1] = (val[x][dp + 1] * w) % l;
// cout << "upd " << x << " " << dp << "\n";
// cout << "upd " << x << " " << dp + 1 << '\n';
++dp;
}
} else {
int u;
cin >> u;
int ans = h[u];
for (int i = 0; i <= 40; i++) {
ans *= val[u][i];
ans %= l;
u = pa[u];
if (!u) break;
}
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... |