#include #include std::vector read_input() { std::vector input; input.reserve(20000); int i = 0; while (std::cin >> i) input.push_back(i); return input; } int read_node(std::vector::iterator &it) { int child_count = *it++; int meta_count = *it++; int value = 0; if (child_count == 0) { for (int i = 0; i < meta_count; i++) value += *it++; return value; } std::vector children; for (int i = 0; i < child_count; i++) children.push_back(read_node(it)); for (int i = 0; i < meta_count; i++) { int index = *it++; if (index > 0 && index <= children.size()) value += children[index - 1]; } return value; } int main(int argc, char **argv) { std::vector input = read_input(); auto iterator = input.begin(); std::cout << read_node(iterator) << std::endl; }