#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5e5 + 7;
vector<int> pref;
vector<int> con[MAXN];//numery poprzedzaczy
int dp[MAXN];
int k, n, a, ans, tmp;
void wczytaj(){
cin >> k;
pref.assign(k+1, 0);
//dzien nr 1
cin >> n;
pref[1] = n;
for(int i = 1; i <= n; i++) con[1].push_back(0);
//reszta dni
for(int i = 2; i <= k; i++){
cin >> n;
pref[i] = pref[i-1] + n;
for(int j = 1; j <= n; j++){
cin >> a;
if(a == 0) con[i].push_back(0);
else con[i].push_back(a + pref[i-2]);
}
}
}
int main(){
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
wczytaj();
for(int i = 0; i < con[k].size(); i++){
dp[i + pref[k-1] + 1] = 1;
if(con[k][i] != 0){
dp[con[k][i]]++;
}
tmp++;
}
ans = tmp;
for(int d = k - 1; d > 0; d--){
tmp = 0;//liczba ludzi potrzebna na dzien nr d
for(int i = 0; i < con[d].size(); i++){
dp[i + pref[d - 1] + 1] = max(1, dp[i + pref[d - 1] + 1]);
if(con[d][i] != 0){
dp[con[d][i]] += dp[i + pref[d - 1] + 1];
}
tmp += max(1, dp[i + pref[d - 1] + 1]);
}
ans = max(ans, tmp);
}
cout << ans;
}
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 | #include <bits/stdc++.h> using namespace std; const int MAXN = 5e5 + 7; vector<int> pref; vector<int> con[MAXN];//numery poprzedzaczy int dp[MAXN]; int k, n, a, ans, tmp; void wczytaj(){ cin >> k; pref.assign(k+1, 0); //dzien nr 1 cin >> n; pref[1] = n; for(int i = 1; i <= n; i++) con[1].push_back(0); //reszta dni for(int i = 2; i <= k; i++){ cin >> n; pref[i] = pref[i-1] + n; for(int j = 1; j <= n; j++){ cin >> a; if(a == 0) con[i].push_back(0); else con[i].push_back(a + pref[i-2]); } } } int main(){ ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0); wczytaj(); for(int i = 0; i < con[k].size(); i++){ dp[i + pref[k-1] + 1] = 1; if(con[k][i] != 0){ dp[con[k][i]]++; } tmp++; } ans = tmp; for(int d = k - 1; d > 0; d--){ tmp = 0;//liczba ludzi potrzebna na dzien nr d for(int i = 0; i < con[d].size(); i++){ dp[i + pref[d - 1] + 1] = max(1, dp[i + pref[d - 1] + 1]); if(con[d][i] != 0){ dp[con[d][i]] += dp[i + pref[d - 1] + 1]; } tmp += max(1, dp[i + pref[d - 1] + 1]); } ans = max(ans, tmp); } cout << ans; } |
English