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
56
#include <cstdio>
#include <vector>

constexpr int epoka_pa(int dzien, int godzina, int minuta) {
    int poprawka = 0;
    if (29 < dzien || (dzien == 29 && 3 <= godzina)) {
        poprawka = -60;
    }
    return (((dzien-23)*24 + godzina)*60 + minuta) - 12*60 + poprawka;
}

int main() {
    int dni;
    int spotkan;

    std::vector<std::vector<int>> poprzednik;
    std::vector<std::vector<int>> uczestnikow;

    scanf("%d %d", &dni, &spotkan);

    poprzednik.emplace_back();
    uczestnikow.emplace_back(spotkan, 0);
    for (int j=0; j<spotkan; ++j) {
        poprzednik[0].emplace_back(0);
    }

    for (int i=1; i<dni; ++i) {
        scanf("%d", &spotkan);
        poprzednik.emplace_back();
        uczestnikow.emplace_back(spotkan, 0);
        for (int j=0; j<spotkan; ++j) {
            int poprzedni;
            scanf("%d", &poprzedni);
            poprzednik[i].emplace_back(poprzedni);
        }
    }

    int wynik = 0;
    for (int i=dni-1; 0 <= i; --i) {
        int suma_dnia = 0;
        for (size_t j=0; j<poprzednik[i].size(); ++j) {
            if (uczestnikow[i][j] == 0) {
                uczestnikow[i][j] = 1;
            }
            suma_dnia += uczestnikow[i][j];
            //fprintf(stderr, "%d ", uczestnikow[i][j]);
            if (poprzednik[i][j]) {
                uczestnikow[i-1][poprzednik[i][j]-1] += uczestnikow[i][j];
            }
        }
        wynik = std::max(wynik, suma_dnia);
        //fprintf(stderr, "\n", uczestnikow[i][j]);
    }

    printf("%d\n", wynik);
}