#include <bits/stdc++.h>
using namespace std;
#define SCALAR(x) \
int x; \
cin >> x;
#define SCALAR_LONG(x) \
long long x; \
cin >> x;
#define VECTOR(v, n) \
vector<int> v(n); \
for (int i = 0; i < n; ++i) \
cin >> v[i];
#define PAIR_VECTOR(v, pair_class, n) \
vector<pair_class> v; \
for (int _ = 0; _ < n; ++_) { \
SCALAR(first); \
SCALAR(second); \
v.push_back({first, second}); \
}
#define PRINT(expr) \
cout << expr << '\n';
#define PRINT_IF(condition) \
auto message = condition ? "Yes" : "No"; \
PRINT(message)
#define BOOST_IO() \
ios::sync_with_stdio(false); \
cin.tie(nullptr);
void solve();
int main()
{
BOOST_IO()
solve();
}
void solve() {
SCALAR(k)
struct Node {
int weight = 1;
int parent = -1;
Node() {}
Node(int p): parent(p) {}
};
vector<vector<Node>> G;
G.reserve(k);
SCALAR(n1)
G.emplace_back(vector<Node>(n1, Node()));
for (int i = 1; i < k; ++i) {
SCALAR(n)
G.emplace_back(vector<Node>());
G.back().reserve(n);
for (int j = 0; j < n; ++j) {
SCALAR(a)
G.back().emplace_back(Node(a - 1));
}
}
int supply = 0;
for (int i = k - 1; i >= 0; --i) {
auto current_supply = 0;
for (auto &node: G[i]) {
if (node.weight > 1) {
--node.weight;
}
current_supply += node.weight;
if (node.parent != -1) {
G[i - 1][node.parent].weight += node.weight;
}
}
supply = max(supply, current_supply);
}
PRINT(supply)
}
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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | #include <bits/stdc++.h> using namespace std; #define SCALAR(x) \ int x; \ cin >> x; #define SCALAR_LONG(x) \ long long x; \ cin >> x; #define VECTOR(v, n) \ vector<int> v(n); \ for (int i = 0; i < n; ++i) \ cin >> v[i]; #define PAIR_VECTOR(v, pair_class, n) \ vector<pair_class> v; \ for (int _ = 0; _ < n; ++_) { \ SCALAR(first); \ SCALAR(second); \ v.push_back({first, second}); \ } #define PRINT(expr) \ cout << expr << '\n'; #define PRINT_IF(condition) \ auto message = condition ? "Yes" : "No"; \ PRINT(message) #define BOOST_IO() \ ios::sync_with_stdio(false); \ cin.tie(nullptr); void solve(); int main() { BOOST_IO() solve(); } void solve() { SCALAR(k) struct Node { int weight = 1; int parent = -1; Node() {} Node(int p): parent(p) {} }; vector<vector<Node>> G; G.reserve(k); SCALAR(n1) G.emplace_back(vector<Node>(n1, Node())); for (int i = 1; i < k; ++i) { SCALAR(n) G.emplace_back(vector<Node>()); G.back().reserve(n); for (int j = 0; j < n; ++j) { SCALAR(a) G.back().emplace_back(Node(a - 1)); } } int supply = 0; for (int i = k - 1; i >= 0; --i) { auto current_supply = 0; for (auto &node: G[i]) { if (node.weight > 1) { --node.weight; } current_supply += node.weight; if (node.parent != -1) { G[i - 1][node.parent].weight += node.weight; } } supply = max(supply, current_supply); } PRINT(supply) } |
English