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
#include <iostream>
#include <vector>

using namespace std;

using ll = long long;

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

	std::vector<std::vector<std::pair<int, ll>>> meets; 
	int k, n, s;
	cin >> k >> n;
	ll res = n;
	meets.resize(k);
	meets[0].resize(n + 1);
	for(int i = 1; i < k; i++) {
		cin >> n;
		meets[i].resize(n + 1);
		for(int j = 1; j <= n; j++) {
			cin >> s;
			meets[i][j] = {s, 0};
		}
	}
	for(int i = k - 1; i >= 0; i--) {
		ll cur = 0;
		for(int j = 1; j < meets[i].size(); j++) {
			meets[i][j].second = max(meets[i][j].second, 1LL);
			if (i != 0) {
				meets[i - 1][meets[i][j].first].second += meets[i][j].second;
			}
			cur += meets[i][j].second;
			//print(cerr, "({}, {}) ", meets[i][j].first, meets[i][j].second);
		}
		//println(cerr);
		res = max(res, cur);
	}
	cout << res;
}