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;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vll;

int main(){
    cin.tie(0)->sync_with_stdio(0);
    int k,n;
    cin >> k >> n;
    vector<vi> meetings;
    vector<vll> cnts;
    vll spare;
    meetings.push_back(vi(n));
    cnts.push_back(vll(n));
    spare.push_back(0);
    while(--k){
        cin >> n;
        meetings.push_back(vi(n));
        cnts.push_back(vll(n));
        spare.push_back(0);
        for(int &x : meetings.back())
            cin >> x;
    }
    for(ll &cnt : cnts.back())
        cnt = 1;
    for(int i=meetings.size()-1; i>=1; --i){
        ll prev_unemployed = 0;
        ll cur_unemployed = 0;
        for(int j=0; j<cnts[i].size(); ++j){
            const int from = meetings[i][j];
            if(from == 0){
                cur_unemployed += cnts[i][j];
            }else{
                cnts[i-1][from-1] += cnts[i][j];
            }
        }

        for(int j=0; j<cnts[i-1].size(); ++j){
            if(cnts[i-1][j] == 0){
                cnts[i-1][j] = 1;
                prev_unemployed += 1;
            }
        }

        spare[i-1] = max(0LL, spare[i] + cur_unemployed - prev_unemployed);
    }

    ll ans = spare[0];
    for(auto &cnt : cnts[0])
        ans += cnt;
    cout << ans;
}