제출 #1340202

#제출 시각아이디문제언어결과실행 시간메모리
1340202orgiloogiiForensic (NOI12_forensic)C++20
25 / 25
6 ms2628 KiB
#include <bits/stdc++.h>
#define int long long
#define ff first
#define ss second
using namespace std;
bool vis[20001] = {0};
map <int, vector <int>> adj;

int dfs(int u) {
    if (vis[u] == 1) return -1;
    int res = 0;
    for (auto v : adj[u]) {
        res = max(res, dfs(v));
    }
    return res + 1;
}

signed main() {
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    int n;
    cin >> n;
    int a[n];
    for (int i = 0;i < n;i++) {
        cin >> a[i];
        adj[a[i]].push_back(i);
    }   
    int ans = 0;
    int curr = 0;
    while (curr != -1 && !vis[curr]) {
        ans++;
        vis[curr] = 1;
        curr = a[curr];
    }
    if (curr == -1) {
        curr = 0;
        int mx = 0;
        while (true) {
            curr = a[curr];
            for (auto v : adj[curr]) {
                mx = max(mx, dfs(v));
            }
            if (curr == -1) break;
        }
        cout << ans + mx << endl;
    }
    else {
        cout << ans + dfs(-1) - 1 << endl;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...