#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define imie(x...) cerr << "[" #x "]: ", [](auto... $) {((cerr << $ << "; "), ...); }(x), cerr << '\n'
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef long double ld;
const int mod=1e9+7;
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
int k;
cin >> k;
vector<int> v(k + 1);
cin >> v[1];
vector<vector<int>> p(k + 1);
for(int i = 2; i <= k; i++) {
cin >> v[i];
p[i].resize(v[i] + 1);
for(int j = 1; j <= v[i]; j++) {
cin >> p[i][j];
}
}
vector<int> x(v[k] + 1, 1);
ll ans = v[k];
for(int i = k - 1; i >= 1; i--) {
vector<int> s(v[i] + 1, 0);
for(int j = 1; j <= v[i + 1]; j++) {
int r = p[i + 1][j];
if(r > 0) {
s[r] += x[j];
}
}
vector<int> akt(v[i] + 1);
ll t = 0;
for(int j = 1; j <= v[i]; j++) {
akt[j] = max(1, s[j]);
t += akt[j];
}
ans = max(ans, t);
x = akt;
}
cout << ans;
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 | #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define imie(x...) cerr << "[" #x "]: ", [](auto... $) {((cerr << $ << "; "), ...); }(x), cerr << '\n' using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef long double ld; const int mod=1e9+7; typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int k; cin >> k; vector<int> v(k + 1); cin >> v[1]; vector<vector<int>> p(k + 1); for(int i = 2; i <= k; i++) { cin >> v[i]; p[i].resize(v[i] + 1); for(int j = 1; j <= v[i]; j++) { cin >> p[i][j]; } } vector<int> x(v[k] + 1, 1); ll ans = v[k]; for(int i = k - 1; i >= 1; i--) { vector<int> s(v[i] + 1, 0); for(int j = 1; j <= v[i + 1]; j++) { int r = p[i + 1][j]; if(r > 0) { s[r] += x[j]; } } vector<int> akt(v[i] + 1); ll t = 0; for(int j = 1; j <= v[i]; j++) { akt[j] = max(1, s[j]); t += akt[j]; } ans = max(ans, t); x = akt; } cout << ans; return 0; } |
English