// File C.cpp created on 01.12.2025 at 09:17:42
#include <bits/stdc++.h>
using i64 = long long;
#ifdef DEBUG
#include "/home/ahmetalp/Desktop/Workplace/debug.h"
#else
#define debug(...) void(23)
#endif
constexpr int md = int(1E9) + 7;
int N;
std::vector<int> P;
std::vector<i64> D;
std::vector<std::vector<int>> adj;
std::vector<i64> H;
void dfs(int v) {
H[v] = 0;
for (auto u : adj[v]) {
dfs(u);
H[v] = std::max(H[v], H[u] + D[u]);
}
}
void solve() {
dfs(0);
int ans = 0;
for (int v = 0; v < N; ++v) {
i64 mx1 = 0, mx2 = 0;
for (auto u : adj[v]) {
if (H[u] + D[u] >= mx1) {
mx2 = mx1;
mx1 = H[u] + D[u];
} else if (H[u] + D[u] >= mx2) {
mx2 = H[u] + D[u];
}
}
ans = (ans + mx1 + mx2) % md;
}
std::cout << ans << '\n';
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> N;
P.resize(N);
D.resize(N);
H.resize(N);
adj.resize(N);
for (int i = 1; i < N; ++i) {
std::cin >> P[i];
adj[P[i]].emplace_back(i);
}
for (int i = 1; i < N; ++i) {
std::cin >> D[i];
}
solve();
int Q;
std::cin >> Q;
while (Q--) {
int V, X;
std::cin >> V >> X;
D[V] += X;
solve();
}
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... |