#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int dni, n1;
cin >> dni >> n1;
vector<int> ile(dni + 1);
vector<vector<int>> tatulek(dni + 1);
ile[1] = n1;
for (int dzionek = 2; dzionek <= dni; dzionek++) {
cin >> ile[dzionek];
tatulek[dzionek].resize(ile[dzionek] + 1);
for (int j = 1; j <= ile[dzionek]; j++) cin >> tatulek[dzionek][j];
}
vector<long long> dp_nastepne(ile[dni] + 1, 1), dp_teraz;
long long wynikowy_potwor = ile[dni];
for (int dzionek = dni - 1; dzionek >= 1; dzionek--) {
vector<long long> dzieciowe_burdy(ile[dzionek] + 1, 0);
for (int j = 1; j <= ile[dzionek + 1]; j++) {
int stary = tatulek[dzionek + 1][j];
if (stary != 0) dzieciowe_burdy[stary] += dp_nastepne[j];
}
dp_teraz.assign(ile[dzionek] + 1, 1);
long long suma_dnia = 0;
for (int j = 1; j <= ile[dzionek]; j++) {
dp_teraz[j] = max(1LL, dzieciowe_burdy[j]);
suma_dnia += dp_teraz[j];
}
wynikowy_potwor = max(wynikowy_potwor, suma_dnia);
dp_nastepne.swap(dp_teraz);
}
cout << wynikowy_potwor << '\n';
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 | #include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int dni, n1; cin >> dni >> n1; vector<int> ile(dni + 1); vector<vector<int>> tatulek(dni + 1); ile[1] = n1; for (int dzionek = 2; dzionek <= dni; dzionek++) { cin >> ile[dzionek]; tatulek[dzionek].resize(ile[dzionek] + 1); for (int j = 1; j <= ile[dzionek]; j++) cin >> tatulek[dzionek][j]; } vector<long long> dp_nastepne(ile[dni] + 1, 1), dp_teraz; long long wynikowy_potwor = ile[dni]; for (int dzionek = dni - 1; dzionek >= 1; dzionek--) { vector<long long> dzieciowe_burdy(ile[dzionek] + 1, 0); for (int j = 1; j <= ile[dzionek + 1]; j++) { int stary = tatulek[dzionek + 1][j]; if (stary != 0) dzieciowe_burdy[stary] += dp_nastepne[j]; } dp_teraz.assign(ile[dzionek] + 1, 1); long long suma_dnia = 0; for (int j = 1; j <= ile[dzionek]; j++) { dp_teraz[j] = max(1LL, dzieciowe_burdy[j]); suma_dnia += dp_teraz[j]; } wynikowy_potwor = max(wynikowy_potwor, suma_dnia); dp_nastepne.swap(dp_teraz); } cout << wynikowy_potwor << '\n'; return 0; } |
English