1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <bits/stdc++.h>

using namespace std;

long long liczbaSpotkan[500007];
long long poczatek[500007];
long long popSpotkanie[500007];
long long ileOsob[500007];

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

    long long k;
    cin >> k;
    
    long long licznik = 0;

    for (long long i=1; i<=k; ++i) {
        cin >> liczbaSpotkan[i];
        poczatek[i] = licznik;

        if (i > 1) {
            for (long long j=0; j<liczbaSpotkan[i];++j) {
                cin >> popSpotkanie[poczatek[i]+j];
            }
        }
        licznik+=liczbaSpotkan[i];
    }

    long long maxPracownikow=0;

    for (long long i=k; i>=1; --i) {
        long long sumaDzis = 0;
        for (long long j=0; j< liczbaSpotkan[i]; ++j) {
            long long akt =poczatek[i]+j;
            long long iluPracownikow = max((long long)1, ileOsob[akt]);
            sumaDzis+=iluPracownikow;

            if (i > 1) {
                long long przod=popSpotkanie[akt];
                if (przod>0) {
                    long long indeksRodzica = poczatek[i-1] + (przod-1);
                    ileOsob[indeksRodzica]+= iluPracownikow;
                }
            }
        }
        maxPracownikow = max(maxPracownikow, sumaDzis);
    }

    cout << maxPracownikow << endl;

    return 0;
}