Submission
Status:
(xxxx)(xxxxxx)(xxxxxxxxxx)
Score: 0
User: hmmm
Problemset: ย้อนศร
Language: cpp
Time: 0.075 second
Submitted On: 2025-01-09 16:59:41
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int a[N];
int dp[N];
vector<int> g[N];
inline int rec(int x){
if(dp[x]!=-1) return dp[x];
// if(chk[x]==true) return a[x];
int cnt=0;
for(auto e:g[x]){
if(x==e) return a[x];
cnt=max(cnt,rec(e));
}
return dp[x]=cnt+a[x];
}
int main(){
ios::sync_with_stdio(0); cin.tie(0);
int n,mx=0;
cin >> n;
for(int i=1;i<=n;i++) cin >> a[i];
for(int i=1;i<=n;i++){
int x;
cin >> x;
g[i].push_back(x);
// if(i==x) chk[i]=true;
dp[i]=-1;
}
for(int i=1;i<=n;i++){
if(dp[i]!=-1) continue;
mx=max(mx,rec(i));
// cout << dp[i] << "\n";
}
cout << mx;
}