222922026-01-14 20:46:01helloworldHírlánccpp17Hibás válasz 0/8046ms9152 KiB
#include <bits/stdc++.h>
using namespace std;

int N;
int C[200001];
int dp[200001];     // dp[i]: hány tanulót ér el i-ből indulva
int state[200001];  // 0 = nem jártunk itt, 1 = folyamatban, 2 = kész

int dfs(int u) {
    state[u] = 1;          // most dolgozzuk fel
    int v = C[u];

    if (state[v] == 0) {
        dp[u] = dfs(v) + 1;
    }
    else if (state[v] == 1) {
        // ciklust találtunk
        int cur = v;
        int len = 1;
        while (C[cur] != v) {
            cur = C[cur];
            len++;
        }

        // a ciklus minden elemére ugyanaz az érték
        cur = v;
        dp[cur] = len;
        cur = C[cur];
        while (cur != v) {
            dp[cur] = len;
            cur = C[cur];
        }

        dp[u] = len;
    }
    else { // state[v] == 2, már kész
        dp[u] = dp[v] + 1;
    }

    state[u] = 2;          // kész
    return dp[u];
}

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

    cin >> N;
    for (int i = 1; i <= N; i++) cin >> C[i];

    for (int i = 1; i <= N; i++) {
        if (state[i] == 0)
            dfs(i);
    }

    int best = 1;
    for (int i = 2; i <= N; i++) {
        if (dp[i] > dp[best]) best = i;
    }

    cout << best << " " << dp[best] << "\n";
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
subtask20/20
2Hibás válasz2ms316 KiB
3Hibás válasz2ms316 KiB
4Hibás válasz2ms316 KiB
5Hibás válasz2ms316 KiB
6Hibás válasz1ms316 KiB
7Hibás válasz1ms316 KiB
8Hibás válasz1ms472 KiB
9Hibás válasz1ms316 KiB
10Hibás válasz1ms316 KiB
11Hibás válasz1ms316 KiB
12Hibás válasz2ms316 KiB
subtask30/18
13Hibás válasz32ms2768 KiB
14Hibás válasz37ms2756 KiB
15Hibás válasz37ms2964 KiB
16Hibás válasz37ms3204 KiB
17Hibás válasz41ms4396 KiB
18Hibás válasz39ms4792 KiB
19Hibás válasz41ms4928 KiB
20Hibás válasz41ms4916 KiB
21Hibás válasz43ms7748 KiB
22Hibás válasz46ms9152 KiB
subtask40/42
23Elfogadva1ms512 KiB
24Hibás válasz2ms316 KiB
25Hibás válasz2ms316 KiB
26Hibás válasz2ms316 KiB
27Hibás válasz2ms316 KiB
28Hibás válasz1ms316 KiB
29Hibás válasz1ms316 KiB
30Hibás válasz1ms472 KiB
31Hibás válasz1ms316 KiB
32Hibás válasz1ms316 KiB
33Hibás válasz1ms316 KiB
34Hibás válasz2ms316 KiB
35Hibás válasz32ms2768 KiB
36Hibás válasz37ms2756 KiB
37Hibás válasz37ms2964 KiB
38Hibás válasz37ms3204 KiB
39Hibás válasz41ms4396 KiB
40Hibás válasz39ms4792 KiB
41Hibás válasz41ms4928 KiB
42Hibás válasz41ms4916 KiB
43Hibás válasz43ms7748 KiB
44Hibás válasz46ms9152 KiB
45Hibás válasz32ms2764 KiB
46Hibás válasz32ms2612 KiB
47Hibás válasz32ms2612 KiB
48Hibás válasz32ms2680 KiB
49Hibás válasz35ms3124 KiB
50Hibás válasz34ms3644 KiB
51Hibás válasz35ms3632 KiB
52Hibás válasz34ms3636 KiB
53Hibás válasz35ms4148 KiB
54Hibás válasz35ms4676 KiB