Submission

Status:

[PPPPPPPPPP][PPPPP][PPPPPPPP][PPPPPPPPPP]

Subtask/Task Score:

{10/10}{5/5}{15/15}{70/70}

Score: 100

User: Nay-O

Problemset: D.Drunk

Language: cpp

Time: 0.119 second

Submitted On: 2026-03-21 11:18:54

#include<bits/stdc++.h>
using namespace std;
using ll = long long;

const int N = 1e6+5;

int d[N],x[N];
int n;

ll dp[N];

ll solve(int a){
	if(x[a]==a){
		return d[a];
	}
	if(dp[a]!=0){
		return dp[a];
	}
	return dp[a] = solve(x[a])+d[a];
}

int main(){
	ios_base::sync_with_stdio(false); cin.tie(NULL);
	
	cin>>n;
	
	for(int i = 1; i <=n ; i++){
		cin>>d[i];
	}
	for(int i = 1; i <= n; i++){
		cin>>x[i];
	}
	ll ans=0;
	for(int i = 1; i <= n; i++){
		ans = max(solve(i),ans);
	}
	
	cout << ans;
	
	return 0;
}