#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main () {
ios_base::sync_with_stdio(0);
cin.tie(0);
int k,n;
cin >> k >> n;
vector <vector <int>> spotkania(k+1);
spotkania[0].resize(n);
for (int i = 1; i < k; i++) {
int x;
cin >> x;
spotkania[i].resize(x);
for (int j = 0; j < x; j++) {
cin >> spotkania[i][j];
}
}
vector <vector <int>> dp(k+1);
dp[k-1].resize(spotkania[k-1].size(),0);
for (int i = 0; i < spotkania[k-1].size(); i++) dp[k-1][i]= 1;
int wyn = spotkania[k-1].size();
for (int i = k-2; i >= 0; i--) {
int nCurr = spotkania[i].size();
int nPrev = spotkania[i+1].size();
dp[i].resize(nCurr,0);
for (int j = 0; j < nPrev; j++) {
if (spotkania[i+1][j] > 0) {
dp[i][spotkania[i+1][j]-1]+=dp[i+1][j];
}
}
for (int j = 0; j < nCurr; j++) if (dp[i][j] == 0) dp[i][j] = 1;
int suma = 0;
for (int j = 0; j < nCurr; j++) suma+=dp[i][j];
wyn = max(wyn,suma);
}
cout << wyn << "\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 | #include <iostream> #include <vector> #include <algorithm> using namespace std; int main () { ios_base::sync_with_stdio(0); cin.tie(0); int k,n; cin >> k >> n; vector <vector <int>> spotkania(k+1); spotkania[0].resize(n); for (int i = 1; i < k; i++) { int x; cin >> x; spotkania[i].resize(x); for (int j = 0; j < x; j++) { cin >> spotkania[i][j]; } } vector <vector <int>> dp(k+1); dp[k-1].resize(spotkania[k-1].size(),0); for (int i = 0; i < spotkania[k-1].size(); i++) dp[k-1][i]= 1; int wyn = spotkania[k-1].size(); for (int i = k-2; i >= 0; i--) { int nCurr = spotkania[i].size(); int nPrev = spotkania[i+1].size(); dp[i].resize(nCurr,0); for (int j = 0; j < nPrev; j++) { if (spotkania[i+1][j] > 0) { dp[i][spotkania[i+1][j]-1]+=dp[i+1][j]; } } for (int j = 0; j < nCurr; j++) if (dp[i][j] == 0) dp[i][j] = 1; int suma = 0; for (int j = 0; j < nCurr; j++) suma+=dp[i][j]; wyn = max(wyn,suma); } cout << wyn << "\n"; return 0; } |
English