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