#include <bits/stdc++.h>
using namespace std;
const int MX = 500001;
vector<int> tab[MX];
int sumy[MX], k, n, wynik, suma_n, dp[MX];
vector<int> graph[MX];
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> k >> n;
sumy[2]=n;
suma_n=n;
for (int i=2; i<=k; i++) {
cin >> n;
suma_n += n;
sumy[i+1] = n+sumy[i];
for (int j=0; j<n; j++) {
int tmp;
cin >> tmp;
tab[i].push_back(tmp);
}
}
for (int i=k; i>1; i--) {
for (int j=0; j<tab[i].size(); j++) {
if (tab[i][j]) {
int w1 = sumy[i]+j+1, w2=sumy[i-1]+tab[i][j];
graph[w1].push_back(w2);
}
}
}
for (int i=suma_n; i>0; i--) {
if (!dp[i]) {dp[i]++;}
for (int j=0; j<graph[i].size(); j++) {
dp[graph[i][j]] += dp[i];
}
}
for (int i=1; i<=k; i++) {
int akt_dzien=0;
for (int j=sumy[i]+1; j<=sumy[i+1]; j++) {
akt_dzien += dp[j];
}
wynik = max(akt_dzien, wynik);
}
cout << wynik;
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 | #include <bits/stdc++.h> using namespace std; const int MX = 500001; vector<int> tab[MX]; int sumy[MX], k, n, wynik, suma_n, dp[MX]; vector<int> graph[MX]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> k >> n; sumy[2]=n; suma_n=n; for (int i=2; i<=k; i++) { cin >> n; suma_n += n; sumy[i+1] = n+sumy[i]; for (int j=0; j<n; j++) { int tmp; cin >> tmp; tab[i].push_back(tmp); } } for (int i=k; i>1; i--) { for (int j=0; j<tab[i].size(); j++) { if (tab[i][j]) { int w1 = sumy[i]+j+1, w2=sumy[i-1]+tab[i][j]; graph[w1].push_back(w2); } } } for (int i=suma_n; i>0; i--) { if (!dp[i]) {dp[i]++;} for (int j=0; j<graph[i].size(); j++) { dp[graph[i][j]] += dp[i]; } } for (int i=1; i<=k; i++) { int akt_dzien=0; for (int j=sumy[i]+1; j<=sumy[i+1]; j++) { akt_dzien += dp[j]; } wynik = max(akt_dzien, wynik); } cout << wynik; return 0; } |
English