Submission
Status:
[PPPPPPPPPP][PPPPP][PPPPPPPP][PPPPPPPPPP]
Subtask/Task Score:
{10/10}{5/5}{15/15}{70/70}
Score: 100
User: Fifaxmb
Problemset: D.Drunk
Language: cpp
Time: 0.114 second
Submitted On: 2026-03-20 19:08:17
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define Fifa67king ios::sync_with_stdio(0);cin.tie(0);
int n;
vector<ll> d,dp,x;
ll solve(int i) {
if (dp[i] != -1) return dp[i];
if (x[i] == i) return dp[i] = d[i];
return dp[i] = d[i] + solve(x[i]);
}
int main() {
Fifa67king;
cin >> n;
d.resize(n + 1);
x.resize(n + 1);
dp.assign(n + 1, -1);
for (int i = 1; i <= n; i++) cin >> d[i];
ll ans = 0;
for (int i = 1; i <= n; i++) cin >> x[i];
for (int i = 1; i <= n; i++) ans = max(ans, solve(i));
cout << ans << '\n';
}