#include <iostream>
#include <vector>
using namespace std;
int k, n, sum_prev[500005], sum[500005], res, temp_res, m, x;
vector<int> V[500005];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> k >> n;
for(int j = 0; j < k; j++) {
if(j == 0) {
for(int i = 0; i < n; i++) {
V[j].push_back(0);
}
continue;
}
cin >> m;
while(m--) {
cin >> x;
V[j].push_back(x);
}
}
for(int i = 0; i < V[k - 1].size(); i++) {
sum_prev[i] = 1;
}
for(int i = k - 1; i > 0; i--) {
temp_res = 0;
for(int j = 0; j < V[i - 1].size(); j++) {
sum[j] = 0;
}
for(int j = 0; j < V[i].size(); j++) {
if (V[i][j] != 0)
sum[V[i][j] - 1] += sum_prev[j];
}
for(int j = 0; j < V[i - 1].size(); j++) {
temp_res += max(1, sum[j]);
sum_prev[j] = max(1, sum[j]);
}
res = max(res, temp_res);
}
cout << res << "\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 <iostream> #include <vector> using namespace std; int k, n, sum_prev[500005], sum[500005], res, temp_res, m, x; vector<int> V[500005]; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> k >> n; for(int j = 0; j < k; j++) { if(j == 0) { for(int i = 0; i < n; i++) { V[j].push_back(0); } continue; } cin >> m; while(m--) { cin >> x; V[j].push_back(x); } } for(int i = 0; i < V[k - 1].size(); i++) { sum_prev[i] = 1; } for(int i = k - 1; i > 0; i--) { temp_res = 0; for(int j = 0; j < V[i - 1].size(); j++) { sum[j] = 0; } for(int j = 0; j < V[i].size(); j++) { if (V[i][j] != 0) sum[V[i][j] - 1] += sum_prev[j]; } for(int j = 0; j < V[i - 1].size(); j++) { temp_res += max(1, sum[j]); sum_prev[j] = max(1, sum[j]); } res = max(res, temp_res); } cout << res << "\n"; } |
English