CSES - Datatähti 2024 alku - Results
Submission details
Task:Laskettelukeskus
Sender:Verlet
Submission time:2023-11-03 13:49:00 +0200
Language:C++ (C++17)
Status:COMPILE ERROR

Compiler report

input/code.cpp:7:8: error: 'Node' was not declared in this scope
    7 | vector<Node*> nodes;
      |        ^~~~
input/code.cpp:7:13: error: template argument 1 is invalid
    7 | vector<Node*> nodes;
      |             ^
input/code.cpp:7:13: error: template argument 2 is invalid
input/code.cpp: In function 'int main()':
input/code.cpp:57:11: error: request for member 'push_back' in 'nodes', which is of non-class type 'int'
   57 |     nodes.push_back(&create_node(data[i]));
      |           ^~~~~~~~~
input/code.cpp:57:33: error: taking address of rvalue [-fpermissive]
   57 |     nodes.push_back(&create_node(data[i]));
      |                      ~~~~~~~~~~~^~~~~~~~~
input/code.cpp:62:10: error: invalid types 'int[int]' for array subscript
   62 |     nodes[path_start[i]]->children.push_back(*nodes[path_end[i]]);
      |          ^
input/code.cpp:62:52: error: invalid types 'int[int]' for array subscript
   62 |     nodes[path_start[i]]->children.push_back(*nodes[path_end[i]]);...

Code

#include <iostream>
#include <vector>
#include <deque>

using namespace std;

vector<Node*> nodes;

struct Node {
  long data;
  vector<Node> children;
};

Node create_node(long data)
{
  Node node;
  node.data = data;
  node.children = vector<Node>(0);
  return node;
}

long eval(Node* root)
{
  if (root->children.size() == 0) return root->data;
  long sum;
  for (Node child : root->children)
  {
    sum += eval(&child);
  }
  return max(root->data, sum);
}

int main()
{
  int n;

  cin >> n;

  int path_start[n-1];
  int path_end[n-1];

  for (int i = 0; i < n - 1; i++)
  {
    cin >> path_start[i];
    cin >> path_end[i];
  }

  int data[n];

  for (int i = 0; i < n; i++)
  {
    cin >> data[i];
  }

  for (int i = 0; i < n; i++)
  {
    nodes.push_back(&create_node(data[i]));
  }

  for (int i = 0; i < n - 1; i++)
  {
    nodes[path_start[i]]->children.push_back(*nodes[path_end[i]]);
  }

  cout << eval(nodes[0]);
}