Submission

Status:

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

Subtask/Task Score:

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

Score: 100

User: hmmm

Problemset: D.Drunk

Language: cpp

Time: 0.108 second

Submitted On: 2025-09-18 14:22:20

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int a[N],b[N],dp[N];
bool vis[N];

inline int rec(int x,int p){
//	cout << x << " ";
	if(dp[x]!=-1) return dp[x];
	if(x==a[x]) return dp[x]=b[x];
	if(vis[x]) return 0;
	vis[x]=true;
	int cnt=rec(a[x],x)+b[x];
	return dp[x]=cnt;
}

int main(){
	ios::sync_with_stdio(0); cin.tie(0);
	int n,cnt=0,mx=0;
	cin >> n;
	for(int i=1;i<=n;i++) cin >> b[i];
	for(int i=1;i<=n;i++) cin >> a[i];
	memset(dp,-1,sizeof dp);
	for(int i=1;i<=n;i++){
		if(dp[i]==-1){
			rec(i,i);
//			cout << "----\n";
			mx=max(mx,dp[i]);
		}
	}
	cout << mx;
}