#include <bits/stdc++.h>
using namespace std;
int k;
vector<int> n;
vector<vector<int>> a;
int solve () {
// Initializing dp
vector<vector<int>> dp;
for (int i = 0; i < a.size(); i++) {
vector<int> dummy(a[i].size(), 1);
dp.push_back(dummy);
}
// Initializing substr
vector<vector<int>> substr;
for (int i = 0; i < a.size(); i++) {
vector<int> dummy(a[i].size(), 0);
substr.push_back(dummy);
}
// Computing dp
for (int i = dp.size() - 1; i >= 1; i--) {
for (int t = 0; t < dp[i].size(); t++) {
if (a[i][t] > 0) {
dp[i - 1][a[i][t] - 1] += dp[i][t];
substr[i - 1][a[i][t] - 1] = 1;
}
}
for (int t = 0; t < dp[i - 1].size(); t++) {
dp[i - 1][t] -= substr[i - 1][t];
}
}
int M = 0;
for (int i = 0; i < dp.size(); i++) {
int sum = 0;
for (int t = 0; t < dp[i].size(); t++) {
sum += dp[i][t];
}
M = max(sum, M);
}
return M;
}
void wczytywanie () {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> k;
n.resize(k);
cin >> n[0];
vector<int> x(n[0], 0);
a.push_back(x);
for (int i = 1; i < k; i++) {
cin >> n[i];
vector<int> dummy(n[i]);
for (int j = 0; j < n[i]; j++) {
cin >> dummy[j];
}
a.push_back(dummy);
}
}
int main() {
wczytywanie();
cout << solve() << endl;
return 0;
}
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 73 74 75 76 77 78 | #include <bits/stdc++.h> using namespace std; int k; vector<int> n; vector<vector<int>> a; int solve () { // Initializing dp vector<vector<int>> dp; for (int i = 0; i < a.size(); i++) { vector<int> dummy(a[i].size(), 1); dp.push_back(dummy); } // Initializing substr vector<vector<int>> substr; for (int i = 0; i < a.size(); i++) { vector<int> dummy(a[i].size(), 0); substr.push_back(dummy); } // Computing dp for (int i = dp.size() - 1; i >= 1; i--) { for (int t = 0; t < dp[i].size(); t++) { if (a[i][t] > 0) { dp[i - 1][a[i][t] - 1] += dp[i][t]; substr[i - 1][a[i][t] - 1] = 1; } } for (int t = 0; t < dp[i - 1].size(); t++) { dp[i - 1][t] -= substr[i - 1][t]; } } int M = 0; for (int i = 0; i < dp.size(); i++) { int sum = 0; for (int t = 0; t < dp[i].size(); t++) { sum += dp[i][t]; } M = max(sum, M); } return M; } void wczytywanie () { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> k; n.resize(k); cin >> n[0]; vector<int> x(n[0], 0); a.push_back(x); for (int i = 1; i < k; i++) { cin >> n[i]; vector<int> dummy(n[i]); for (int j = 0; j < n[i]; j++) { cin >> dummy[j]; } a.push_back(dummy); } } int main() { wczytywanie(); cout << solve() << endl; return 0; } |
English