230932026-01-16 11:55:36badamHírlánccpp17Elfogadva 80/8037ms3460 KiB
#include <iostream>
#include <vector>

using namespace std;

// Globális változók a memória miatt (gyorsabb)
vector<int> t;
vector<int> eredmeny;
vector<int> path;
vector<int> path_idx;

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

    int n;
    cin >> n;

    t.resize(n);
    for(int i = 0; i < n; i++)
    {
        cin >> t[i];
        t[i]--;
    }

    eredmeny.assign(n, 0);
    path_idx.assign(n, -1);
    path.reserve(n);

    int leghosszabb_ut = 0;
    int legjobb_kezdes = 0;

    for(int i = 0; i < n; i++)
    {
        if (eredmeny[i] != 0) continue;

        int jelenlegi = i;
        path.clear();

        while (true)
        {
            if (eredmeny[jelenlegi] != 0)
            {
                int hossz = eredmeny[jelenlegi];
                for (int j = path.size() - 1; j >= 0; j--)
                {
                    hossz++;
                    eredmeny[path[j]] = hossz;
                    path_idx[path[j]] = -1;
                }
                break;
            }
            if (path_idx[jelenlegi] != -1)
            {
                int kor_start = path_idx[jelenlegi];
                int kor_merete = path.size() - kor_start;
                for (int j = kor_start; j < path.size(); j++)
                {
                    eredmeny[path[j]] = kor_merete;
                    path_idx[path[j]] = -1;
                }
                int aktualis_hossz = kor_merete;
                for (int j = kor_start - 1; j >= 0; j--)
                {
                    aktualis_hossz++;
                    eredmeny[path[j]] = aktualis_hossz;
                    path_idx[path[j]] = -1;
                }
                break;
            }
            path_idx[jelenlegi] = path.size();
            path.push_back(jelenlegi);
            jelenlegi = t[jelenlegi];
        }
    }
    for(int i = 0; i < n; i++)
    {
        if (eredmeny[i] > leghosszabb_ut)
        {
            leghosszabb_ut = eredmeny[i];
            legjobb_kezdes = i + 1;
        }
    }
    cout << legjobb_kezdes << " " << leghosszabb_ut;
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
subtask220/20
2Elfogadva2ms316 KiB
3Elfogadva1ms316 KiB
4Elfogadva2ms316 KiB
5Elfogadva2ms316 KiB
6Elfogadva1ms316 KiB
7Elfogadva1ms316 KiB
8Elfogadva1ms316 KiB
9Elfogadva2ms316 KiB
10Elfogadva1ms316 KiB
11Elfogadva1ms512 KiB
12Elfogadva2ms508 KiB
subtask318/18
13Elfogadva35ms2612 KiB
14Elfogadva34ms2760 KiB
15Elfogadva37ms2612 KiB
16Elfogadva35ms2804 KiB
17Elfogadva35ms2888 KiB
18Elfogadva37ms2864 KiB
19Elfogadva35ms2868 KiB
20Elfogadva35ms2868 KiB
21Elfogadva35ms3276 KiB
22Elfogadva37ms3460 KiB
subtask442/42
23Elfogadva1ms500 KiB
24Elfogadva2ms316 KiB
25Elfogadva1ms316 KiB
26Elfogadva2ms316 KiB
27Elfogadva2ms316 KiB
28Elfogadva1ms316 KiB
29Elfogadva1ms316 KiB
30Elfogadva1ms316 KiB
31Elfogadva2ms316 KiB
32Elfogadva1ms316 KiB
33Elfogadva1ms512 KiB
34Elfogadva2ms508 KiB
35Elfogadva35ms2612 KiB
36Elfogadva34ms2760 KiB
37Elfogadva37ms2612 KiB
38Elfogadva35ms2804 KiB
39Elfogadva35ms2888 KiB
40Elfogadva37ms2864 KiB
41Elfogadva35ms2868 KiB
42Elfogadva35ms2868 KiB
43Elfogadva35ms3276 KiB
44Elfogadva37ms3460 KiB
45Elfogadva35ms2612 KiB
46Elfogadva34ms2632 KiB
47Elfogadva34ms2616 KiB
48Elfogadva34ms2756 KiB
49Elfogadva35ms2612 KiB
50Elfogadva35ms2992 KiB
51Elfogadva35ms2868 KiB
52Elfogadva34ms2852 KiB
53Elfogadva35ms2868 KiB
54Elfogadva34ms3112 KiB