제출 #1297562

#제출 시각아이디문제언어결과실행 시간메모리
1297562MisterReaperArboras (RMI20_arboras)C++20
11 / 100
5094 ms7924 KiB
// 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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...