#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;
}
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; } |
English