230922026-01-16 11:53:54badamHírlánccpp17Elfogadva 80/8037ms3744 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
2Elfogadva1ms332 KiB
3Elfogadva1ms316 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms316 KiB
7Elfogadva1ms316 KiB
8Elfogadva1ms332 KiB
9Elfogadva1ms316 KiB
10Elfogadva1ms316 KiB
11Elfogadva1ms316 KiB
12Elfogadva1ms552 KiB
subtask318/18
13Elfogadva35ms2760 KiB
14Elfogadva35ms2756 KiB
15Elfogadva35ms2816 KiB
16Elfogadva35ms2800 KiB
17Elfogadva35ms2880 KiB
18Elfogadva35ms3036 KiB
19Elfogadva37ms2876 KiB
20Elfogadva37ms3012 KiB
21Elfogadva35ms3380 KiB
22Elfogadva37ms3744 KiB
subtask442/42
23Elfogadva1ms316 KiB
24Elfogadva1ms332 KiB
25Elfogadva1ms316 KiB
26Elfogadva1ms316 KiB
27Elfogadva1ms316 KiB
28Elfogadva1ms316 KiB
29Elfogadva1ms316 KiB
30Elfogadva1ms332 KiB
31Elfogadva1ms316 KiB
32Elfogadva1ms316 KiB
33Elfogadva1ms316 KiB
34Elfogadva1ms552 KiB
35Elfogadva35ms2760 KiB
36Elfogadva35ms2756 KiB
37Elfogadva35ms2816 KiB
38Elfogadva35ms2800 KiB
39Elfogadva35ms2880 KiB
40Elfogadva35ms3036 KiB
41Elfogadva37ms2876 KiB
42Elfogadva37ms3012 KiB
43Elfogadva35ms3380 KiB
44Elfogadva37ms3744 KiB
45Elfogadva34ms2760 KiB
46Elfogadva34ms2608 KiB
47Elfogadva34ms2608 KiB
48Elfogadva34ms2756 KiB
49Elfogadva34ms2756 KiB
50Elfogadva35ms2884 KiB
51Elfogadva35ms2760 KiB
52Elfogadva35ms2756 KiB
53Elfogadva35ms2956 KiB
54Elfogadva34ms2868 KiB