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';
}