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