Submission
Status:
[PPPPPPPPPP][PPPPP][PPPPPPPP][PPPPPPPPPP]
Score: 100
User: mydKN
Problemset: D.Drunk
Language: cpp
Time: 0.321 second
Submitted On: 2025-01-05 15:20:04
#include<bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
const int maxn = 1e6 + 10;
const int inf = 2e9;
int n;
vector<int> d(maxn);
vector<pii> G[maxn];
vector<int> dist(maxn);
int mx = -inf;
int solve(int nownode){
if(dist[nownode]) return dist[nownode];
bool chk = 0;
for(auto vw : G[nownode]){
int tonode = vw.second;
int todist = vw.first;
if(tonode == nownode){
dist[nownode] += todist;
}
else dist[nownode] += todist + solve(tonode);
chk = 1;
}
return (chk)?dist[nownode]:d[nownode];
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);
cin >> n;
for(int i=1;i<=n;++i){
cin >> d[i];
}
for(int i=1;i<=n;++i){
int x;
cin >> x;
G[i].emplace_back(d[i], x);
}
for(int i=1;i<=n;++i){
solve(i);
mx = max(dist[i], mx);
}
cout << mx;
}