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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <bits/stdc++.h>
using namespace std;

struct Meetings {

  friend istream& operator>>(istream& is, Meetings& meetings) {
    is >> meetings.days_;
    meetings.prvs_.resize(meetings.days_);
    int day0;
    is >> day0;
    meetings.prvs_[0].resize(day0, -1);
    for (int i = 1; i < meetings.days_; i++) {
      int nr;
      cin >> nr;
      meetings.prvs_[i].resize(nr);
      for (int &v : meetings.prvs_[i]) {
        cin >> v;
        v--;
      }
    }
    return is;
  }

  int solve() {
    vector<int> old_people, new_people;
    int res = 0;
    int curr = 0;
    for (int i = days_-1; i >= 0; i--) {
      old_people.resize(prvs_[i].size(), 0);
      fill(old_people.begin(), old_people.end(), 0);
      for (int j = 0; j < (int) new_people.size(); j++) {
        if (prvs_[i+1][j] != -1) {
          old_people[prvs_[i+1][j]] += new_people[j];
          // cerr << "ADDING TO " << prvs_[i+1][j] << " " << i+1 << " " << j  << endl;
        }
        else {
          curr -= new_people[j];
        }
      }
      for (int& v : old_people) {
        if (v == 0) {
          v++;
          curr++;
        }
      }
      res = max(res, curr);
//      cerr << curr << " " << res << endl;
//      for (int v : old_people) { 
//      cerr << v << " ";
//    }
//    cerr << "\n---------" << endl;
      swap(old_people, new_people);

    }
    return res;
  }




  int days_;
  vector<vector<int>> prvs_;
};

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

  Meetings meetings;
  cin >> meetings;
  cout << meetings.solve() << "\n";
}