Submission
Status:
[PPPPPPPPPP][-SSSS][PPPPPPPP][PPPPPPPPPP]
Subtask/Task Score:
{10/10}{0/5}{15/15}{70/70}
Score: 95
User: hmmm
Problemset: D.Drunk
Language: cpp
Time: 0.118 second
Submitted On: 2025-09-18 14:20:21
#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 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;
}