Submission

Status:
[PPPPPPPPPP][PPPPP][PPPPPPPP][PPPPPPPPPP]

Score: 100

User: mydKN

Problemset: D.Drunk

Language: cpp

Time: 0.362 second

Submitted On: 2025-01-05 15:22:38

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