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
#include <bits/stdc++.h>
using namespace std;

vector<int> inputs[500010];
vector<int> requirements[500010];
int main() {
	std::ios_base::sync_with_stdio(false);

	int day_count, meeting_count;
	cin >> day_count >> meeting_count;

	for (int i = 0; i < meeting_count; i++) {
		inputs[0].push_back(0);
		requirements[0].push_back(0);
	}

	int cont;
	for (int j = 1; j < day_count; j++) {
		cin >> meeting_count;
		for (int r = 0; r < meeting_count; r++) {
			cin >> cont;
			inputs[j].push_back(cont);
			requirements[j].push_back(0);
		}
	}

	//cout << "Input done" << endl;

	

	for (int i = day_count - 1; i >= 0; i--) {
		for (int j = 0; j < requirements[i].size(); j++) {
			requirements[i][j] = max(requirements[i][j], 1);
		}

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

	//cout << "Processing done" << endl;

	int max_sum = 0;
	int sum = 0;
	for (int i = 0; i < day_count; i++) {
		sum = 0;
		for (int j = 0; j < requirements[i].size(); j++) {
			sum += requirements[i][j];
		}
		if (sum > max_sum) {
			max_sum = sum;
		}
	}
	//cout << "Sum calc" << endl;
	cout << max_sum << "\n";
}