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
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define ssize(x) int((x).size())

void solve() {
    int k, n1; scanf("%d%d", &k, &n1);
    vector <vector <int> > g(k + 1), partic(k + 1);
    g[1].resize(n1, 0);
    partic[1].resize(n1, 0);

    for(int i = 2; i <= k; ++i) {
        int ni; scanf("%d", &ni);
        partic[i].resize(ni, 0);
        for(int j = 0; j < ni; ++j) {
            int b; scanf("%d", &b);
            g[i].pb(b);
        }
    }

    int ans = 0;
    for(int i = k; i >= 1; --i) {
        int sum = 0;
        for(int j = 0; j < ssize(g[i]); ++j) {
            int p = partic[i][j];
            p = max(p, 1);
            sum += p;

            if(g[i][j]) partic[i - 1][g[i][j] - 1] += p;
        }
        ans = max(ans, sum);
    }
    printf("%d\n", ans);
}

int main() {
    solve();
    return 0;
}