Submission
Status:
[PPPPPPPPPP][PPPPP][PPPPPPPP][PPPPPPPPPP]
Subtask/Task Score:
{10/10}{5/5}{15/15}{70/70}
Score: 100
User: KantaponZ
Problemset: D.Drunk
Language: cpp
Time: 0.297 second
Submitted On: 2025-09-04 14:15:22
#include <bits/stdc++.h>
using namespace std;
int n;
int d[1000005];
int x[1000005];
int dist[1000005];
vector<vector<pair<int,int>>> adj(1000005);
void dfs(int u, int pa) {
for (auto [v, w] : adj[u]) {
dist[v] = dist[u] + w;
dfs(v, u);
}
}
int main() {
ios_base::sync_with_stdio(0), cin.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) cin >> d[i];
for (int i = 1; i <= n; i++) cin >> x[i];
for (int i = 1; i <= n; i++) {
int u = i, v = x[i];
if (u == v ) v = 0;
int w = d[i];
adj[v].emplace_back(u, w);
}
dfs(0, -1);
int ans = 0;
for (int i = 1; i <= n; i++) ans = max(ans, dist[i]);
cout << ans;
}