Submission

Status:

[PPPPPPPPPP][PPPPP][PPPPPPPP][PPPPPPPPPP]

Subtask/Task Score:

{10/10}{5/5}{15/15}{70/70}

Score: 100

User: purihorharin

Problemset: D.Drunk

Language: cpp

Time: 0.108 second

Submitted On: 2026-03-20 12:43:18

#include <iostream>
#include <vector>
using namespace std;

int helper (vector<int>& d, vector<int>& x, vector<int>& m, int i) {
    if (x[i] == i) return d[i];
    if (m[i] == 0) m[i] = d[i] + helper(d, x, m, x[i]);
    return m[i];
}

int main () {
    cin.tie(nullptr);
    ios_base::sync_with_stdio(false);

    int n;
    cin >> n;
    vector<int> d(n);
    vector<int> x(n);

    for (int& rf : d) {
        cin >> rf;
    }
    for (int& rf : x) {
        cin >> rf;
        rf--;
    }

    vector<int> m(n);
    int mymax = 0;
    for (int i = 0; i < n; i++) {
        int result = helper(d, x, m, i);
        if (mymax < result) mymax = result;
    }
    cout << mymax;
}