#include <bits/stdc++.h>
using namespace std;
using ll = long long;
vector<vector<int>> dni;
vector<int> ile;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int k,n1;
cin >> k >> n1;
ile.resize(k+1);
dni.resize(k+1);
ile[1]=n1;
for(int i =2;i<=k;i++){
cin >> ile[i];
dni[i].resize(ile[i]+1);
for(int j=1;j<=ile[i];j++){
cin >> dni[i][j];
}
}
vector<ll> dp(ile[k]+1,1);
ll wynik= ile[k];
for(int dzien=k;dzien>=2;dzien--){
vector<ll> suma(ile[dzien-1]+1,0);
for(int j=1;j<=ile[dzien];j++){
int ojc= dni[dzien][j];
if(ojc!=0){
suma[ojc]+= dp[j];
}
}
vector<ll> ndp(ile[dzien-1]+1,1);
ll ter =0;
for(int j=1;j<=ile[dzien-1];j++){
ndp[j]= max(1LL,suma[j]);
ter+=ndp[j];
}
wynik=max(wynik,ter);
dp=ndp;
}
cout <<wynik<< '\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 48 49 50 51 | #include <bits/stdc++.h> using namespace std; using ll = long long; vector<vector<int>> dni; vector<int> ile; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int k,n1; cin >> k >> n1; ile.resize(k+1); dni.resize(k+1); ile[1]=n1; for(int i =2;i<=k;i++){ cin >> ile[i]; dni[i].resize(ile[i]+1); for(int j=1;j<=ile[i];j++){ cin >> dni[i][j]; } } vector<ll> dp(ile[k]+1,1); ll wynik= ile[k]; for(int dzien=k;dzien>=2;dzien--){ vector<ll> suma(ile[dzien-1]+1,0); for(int j=1;j<=ile[dzien];j++){ int ojc= dni[dzien][j]; if(ojc!=0){ suma[ojc]+= dp[j]; } } vector<ll> ndp(ile[dzien-1]+1,1); ll ter =0; for(int j=1;j<=ile[dzien-1];j++){ ndp[j]= max(1LL,suma[j]); ter+=ndp[j]; } wynik=max(wynik,ter); dp=ndp; } cout <<wynik<< '\n'; return 0; } |
English