Submission
Status:
[PPPPPPPPPP][PPPPP][PPPPPPPP][PPPPPPPPPP]
Score: 100
User: chawinkn
Problemset: D.Drunk
Language: cpp
Time: 0.161 second
Submitted On: 2025-04-04 18:56:59
#include <bits/stdc++.h>
using namespace std;
int d[1000009], x[1000009], dp[1000009];
int dfs(int u) {
if (u == x[u]) return d[u];
if (dp[u] != -1) return dp[u];
return dp[u] = dfs(x[u])+d[u];
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
int n;
cin >> n;
for (int i = 1; i <= n; i++) cin >> d[i];
for (int i = 1; i <= n; i++) cin >> x[i];
memset(dp, -1, sizeof(dp));
int ans=0;
for (int i = 1; i <= n; i++) ans = max(ans, dfs(i));
cout << ans;
return 0;
}