#include <bits/stdc++.h>
using namespace std;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int K,N;
cin>>K>>N;
vector<int> tab[K+1];
vector<int> dp[K+1];
for (int i=0;i<N;i++){
tab[0].push_back(0);
dp[0].push_back(0);
}
for (int i=1;i<K;i++){
int ile;
cin>>ile;
for (int j=0;j<ile;j++){
int val;
cin>>val;
tab[i].push_back(val);
dp[i].push_back(0);
}
}
long long poprzednia=0;
for (int i=K-1;i>=1;i--){
long long suma=0;
for (int j=0;j<(int)tab[i].size();j++){
if (dp[i][j]==0) dp[i][j]=1;
if (tab[i][j]!=0) dp[i-1][tab[i][j]-1]+=dp[i][j];
suma+=dp[i][j];
}
// cout<<"suma";
if (suma<poprzednia){
dp[i][0]+=poprzednia-suma;
suma=poprzednia;
}
poprzednia=suma;
}
long long ans=0;
for (int i=0;i<N;i++){
if (dp[0][i]==0) dp[0][i]=1;
ans+=dp[0][i];
}
cout<<max(poprzednia,ans)<<"\n\n";
}
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 | #include <bits/stdc++.h> using namespace std; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int K,N; cin>>K>>N; vector<int> tab[K+1]; vector<int> dp[K+1]; for (int i=0;i<N;i++){ tab[0].push_back(0); dp[0].push_back(0); } for (int i=1;i<K;i++){ int ile; cin>>ile; for (int j=0;j<ile;j++){ int val; cin>>val; tab[i].push_back(val); dp[i].push_back(0); } } long long poprzednia=0; for (int i=K-1;i>=1;i--){ long long suma=0; for (int j=0;j<(int)tab[i].size();j++){ if (dp[i][j]==0) dp[i][j]=1; if (tab[i][j]!=0) dp[i-1][tab[i][j]-1]+=dp[i][j]; suma+=dp[i][j]; } // cout<<"suma"; if (suma<poprzednia){ dp[i][0]+=poprzednia-suma; suma=poprzednia; } poprzednia=suma; } long long ans=0; for (int i=0;i<N;i++){ if (dp[0][i]==0) dp[0][i]=1; ans+=dp[0][i]; } cout<<max(poprzednia,ans)<<"\n\n"; } |
English