#include <iostream>
#include <vector>
#include <unordered_map>
#include <climits>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(nullptr);
int k, n;
cin >> k >> n;
vector<vector<int>> dni(k, vector<int>());
dni[0].resize(n);
for (int i = 0; i < n; i++)
dni[0][i] = 0;
for (int i = 1; i < k; i++) {
int ki;
cin >> ki;
dni[i].resize(ki);
for (int j = 0; j < ki; j++)
cin >> dni[i][j];
}
unordered_map<int, int> pol;
int odp = n;
for(int i = k - 1; i >= 0; i--) {
int potrzebnaIlosc = 0;
unordered_map<int, int> nastepnePol;
for (int j = 0; j < dni[i].size(); j++) {
int laczySieZ = dni[i][j];
int doPoprzedniego = pol[j+1];
int iloscNaTej = 1;
if (doPoprzedniego != 0) {
iloscNaTej = doPoprzedniego;
}
if (laczySieZ != 0)
nastepnePol[dni[i][j]] += iloscNaTej;
potrzebnaIlosc += iloscNaTej;
}
pol = nastepnePol;
odp = max(odp, potrzebnaIlosc);
}
cout << odp << "\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 <iostream> #include <vector> #include <unordered_map> #include <climits> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(nullptr); int k, n; cin >> k >> n; vector<vector<int>> dni(k, vector<int>()); dni[0].resize(n); for (int i = 0; i < n; i++) dni[0][i] = 0; for (int i = 1; i < k; i++) { int ki; cin >> ki; dni[i].resize(ki); for (int j = 0; j < ki; j++) cin >> dni[i][j]; } unordered_map<int, int> pol; int odp = n; for(int i = k - 1; i >= 0; i--) { int potrzebnaIlosc = 0; unordered_map<int, int> nastepnePol; for (int j = 0; j < dni[i].size(); j++) { int laczySieZ = dni[i][j]; int doPoprzedniego = pol[j+1]; int iloscNaTej = 1; if (doPoprzedniego != 0) { iloscNaTej = doPoprzedniego; } if (laczySieZ != 0) nastepnePol[dni[i][j]] += iloscNaTej; potrzebnaIlosc += iloscNaTej; } pol = nastepnePol; odp = max(odp, potrzebnaIlosc); } cout << odp << "\n"; return 0; } |
English