Submission #1172556

#TimeUsernameProblemLanguageResultExecution timeMemory
1172556versesrev경주 (Race) (IOI11_race)C++20
Compilation error
0 ms0 KiB
// 23:47

int best_path(int N, int K, int H[][2], int L[]) {
  if (N == 1) {
    return -1;
  }
  std::vector<std::vector<std::pair<int, long long>>> edges;
  for (int i = 0; i < N.- 1; ++i) {
    edges[H[i][0]].emplace_back(H[i][1], L[i]);
    edges[H[i][1]].emplace_back(H[i][0], L[i]);
  }
  int ans = N + 1;
  std::vector<bool> exist(N, true);
  std::vector<std::vector<int>> subtree_sizes;
  std::vector<std::vector<int>> dists;
  std::vector<std::vector<int>> depths;
  std::vector<std::vector<int>> min_lengths;
  auto dc = [&](int dc_depth, int root) {
    if (dc_depth >= subtree_sizes.size()) {
      subtree_sizes.emplace_back(N, 0);
      dists.emplace_back(N, 0);
      depths.emplace_back(N, 0);
      min_lengths.emplace_back(K + 1, N + 1);
    }
    // find centroid
    int g = std::invoke([&]{
      auto& subtree_size = subtree_size[dc_depth];
      std::function<int(int, int)> dfs = [&](int v, int p) {
        subtree_size[v] = 1;
        for (auto [u, _] : edges[v]) {
          if (not exist[u] or u == p) continue;
          int u_size = dfs(u, v);
          subtree_size[v] += u;
        }
        return subtree_size[v];
      };
      dfs(root, -1);
      int total_size = subtree_size[root];
      int g = root;
      int last_g = -1;
      while (true) {
        bool is_centroid = true;
        for (auto [u, _] : edges[g]) {
          if (not exist[u] or u == last_g) continue;
          if (subtree_size[u] > total / 2) {
            is_centroid = false;
            last_g = g;
            g = u;
          }
        }
        if (is_centroid) break;
      }
      return g;
    });
    exist[g] = false;
    // dc(subtrees)
    for (auto [u, _] : edges[g]) {
      dc(dc_depth + 1, u);
    }
    // merge
    //   dfs to get dist
    //.  for each subtree
    //.    for each node
    //.      try to update ans d[node]
    //.    for each node
    //.      update query map
    auto& dist = dists[dc_depth];
    auto& depth = depths[dc_depth];
    auto& min_length = min_lengths[dc_depth];
    std::function<void(int, int)> dfs = [&](int v, int p) {
      if (dist[v] > K) return;
      if (dist[v] == K) {
        ans = std::min(ans, depth[v]);
      }
      else if (dist[v] < K) {
        ans = std::min(ans, depth[v] + min_length[K - dist[v]]);
      }
      for (auto [u, w] : edges[v]) {
        if (not exist[u] or u == p) continue;
        dist[u] = dist[v] + w;
        depth[u] = depth[v] + 1;
        dfs(u, v);
      }
      min_length[dist[v]] = std::min(min_length[dist[v]], depth[v]);
    };
    dist[g] = 0;
    depth[g] = 0;
    dfs(g, -1);
  };
  dc(0, 0);
  return ans == N + 1 ? -1 : ans;
}

Compilation message (stderr)

race.cpp: In function 'int best_path(int, int, int (*)[2], int*)':
race.cpp:7:8: error: 'vector' is not a member of 'std'
    7 |   std::vector<std::vector<std::pair<int, long long>>> edges;
      |        ^~~~~~
race.cpp:1:1: note: 'std::vector' is defined in header '<vector>'; did you forget to '#include <vector>'?
  +++ |+#include <vector>
    1 | // 23:47
race.cpp:7:20: error: 'vector' is not a member of 'std'
    7 |   std::vector<std::vector<std::pair<int, long long>>> edges;
      |                    ^~~~~~
race.cpp:7:20: note: 'std::vector' is defined in header '<vector>'; did you forget to '#include <vector>'?
race.cpp:7:32: error: 'pair' is not a member of 'std'
    7 |   std::vector<std::vector<std::pair<int, long long>>> edges;
      |                                ^~~~
race.cpp:1:1: note: 'std::pair' is defined in header '<utility>'; did you forget to '#include <utility>'?
  +++ |+#include <utility>
    1 | // 23:47
race.cpp:7:37: error: expected primary-expression before 'int'
    7 |   std::vector<std::vector<std::pair<int, long long>>> edges;
      |                                     ^~~
race.cpp:8:25: error: expected unqualified-id before '-' token
    8 |   for (int i = 0; i < N.- 1; ++i) {
      |                         ^
race.cpp:9:5: error: 'edges' was not declared in this scope
    9 |     edges[H[i][0]].emplace_back(H[i][1], L[i]);
      |     ^~~~~
race.cpp:13:8: error: 'vector' is not a member of 'std'
   13 |   std::vector<bool> exist(N, true);
      |        ^~~~~~
race.cpp:13:8: note: 'std::vector' is defined in header '<vector>'; did you forget to '#include <vector>'?
race.cpp:13:15: error: expected primary-expression before 'bool'
   13 |   std::vector<bool> exist(N, true);
      |               ^~~~
race.cpp:14:8: error: 'vector' is not a member of 'std'
   14 |   std::vector<std::vector<int>> subtree_sizes;
      |        ^~~~~~
race.cpp:14:8: note: 'std::vector' is defined in header '<vector>'; did you forget to '#include <vector>'?
race.cpp:14:20: error: 'vector' is not a member of 'std'
   14 |   std::vector<std::vector<int>> subtree_sizes;
      |                    ^~~~~~
race.cpp:14:20: note: 'std::vector' is defined in header '<vector>'; did you forget to '#include <vector>'?
race.cpp:14:27: error: expected primary-expression before 'int'
   14 |   std::vector<std::vector<int>> subtree_sizes;
      |                           ^~~
race.cpp:15:8: error: 'vector' is not a member of 'std'
   15 |   std::vector<std::vector<int>> dists;
      |        ^~~~~~
race.cpp:15:8: note: 'std::vector' is defined in header '<vector>'; did you forget to '#include <vector>'?
race.cpp:15:20: error: 'vector' is not a member of 'std'
   15 |   std::vector<std::vector<int>> dists;
      |                    ^~~~~~
race.cpp:15:20: note: 'std::vector' is defined in header '<vector>'; did you forget to '#include <vector>'?
race.cpp:15:27: error: expected primary-expression before 'int'
   15 |   std::vector<std::vector<int>> dists;
      |                           ^~~
race.cpp:16:8: error: 'vector' is not a member of 'std'
   16 |   std::vector<std::vector<int>> depths;
      |        ^~~~~~
race.cpp:16:8: note: 'std::vector' is defined in header '<vector>'; did you forget to '#include <vector>'?
race.cpp:16:20: error: 'vector' is not a member of 'std'
   16 |   std::vector<std::vector<int>> depths;
      |                    ^~~~~~
race.cpp:16:20: note: 'std::vector' is defined in header '<vector>'; did you forget to '#include <vector>'?
race.cpp:16:27: error: expected primary-expression before 'int'
   16 |   std::vector<std::vector<int>> depths;
      |                           ^~~
race.cpp:17:8: error: 'vector' is not a member of 'std'
   17 |   std::vector<std::vector<int>> min_lengths;
      |        ^~~~~~
race.cpp:17:8: note: 'std::vector' is defined in header '<vector>'; did you forget to '#include <vector>'?
race.cpp:17:20: error: 'vector' is not a member of 'std'
   17 |   std::vector<std::vector<int>> min_lengths;
      |                    ^~~~~~
race.cpp:17:20: note: 'std::vector' is defined in header '<vector>'; did you forget to '#include <vector>'?
race.cpp:17:27: error: expected primary-expression before 'int'
   17 |   std::vector<std::vector<int>> min_lengths;
      |                           ^~~
race.cpp: In lambda function:
race.cpp:19:21: error: 'subtree_sizes' was not declared in this scope
   19 |     if (dc_depth >= subtree_sizes.size()) {
      |                     ^~~~~~~~~~~~~
race.cpp:21:7: error: 'dists' was not declared in this scope
   21 |       dists.emplace_back(N, 0);
      |       ^~~~~
race.cpp:22:7: error: 'depths' was not declared in this scope
   22 |       depths.emplace_back(N, 0);
      |       ^~~~~~
race.cpp:23:7: error: 'min_lengths' was not declared in this scope
   23 |       min_lengths.emplace_back(K + 1, N + 1);
      |       ^~~~~~~~~~~
race.cpp:26:18: error: 'invoke' is not a member of 'std'
   26 |     int g = std::invoke([&]{
      |                  ^~~~~~
race.cpp:1:1: note: 'std::invoke' is defined in header '<functional>'; did you forget to '#include <functional>'?
  +++ |+#include <functional>
    1 | // 23:47
race.cpp: In lambda function:
race.cpp:27:28: error: use of 'subtree_size' before deduction of 'auto'
   27 |       auto& subtree_size = subtree_size[dc_depth];
      |                            ^~~~~~~~~~~~
race.cpp:28:12: error: 'function' is not a member of 'std'
   28 |       std::function<int(int, int)> dfs = [&](int v, int p) {
      |            ^~~~~~~~
race.cpp:28:12: note: 'std::function' is defined in header '<functional>'; did you forget to '#include <functional>'?
race.cpp:28:33: error: expression list treated as compound expression in functional cast [-fpermissive]
   28 |       std::function<int(int, int)> dfs = [&](int v, int p) {
      |                                 ^
race.cpp:28:21: error: expected primary-expression before 'int'
   28 |       std::function<int(int, int)> dfs = [&](int v, int p) {
      |                     ^~~
race.cpp:37:7: error: 'dfs' was not declared in this scope
   37 |       dfs(root, -1);
      |       ^~~
race.cpp:43:28: error: 'edges' was not declared in this scope
   43 |         for (auto [u, _] : edges[g]) {
      |                            ^~~~~
race.cpp:44:19: error: 'exist' was not declared in this scope
   44 |           if (not exist[u] or u == last_g) continue;
      |                   ^~~~~
race.cpp:45:33: error: 'total' was not declared in this scope
   45 |           if (subtree_size[u] > total / 2) {
      |                                 ^~~~~
race.cpp: In lambda function:
race.cpp:55:5: error: 'exist' was not declared in this scope
   55 |     exist[g] = false;
      |     ^~~~~
race.cpp:57:24: error: 'edges' was not declared in this scope
   57 |     for (auto [u, _] : edges[g]) {
      |                        ^~~~~
race.cpp:58:7: error: use of 'dc' before deduction of 'auto'
   58 |       dc(dc_depth + 1, u);
      |       ^~
race.cpp:67:18: error: 'dists' was not declared in this scope; did you mean 'dist'?
   67 |     auto& dist = dists[dc_depth];
      |                  ^~~~~
      |                  dist
race.cpp:68:19: error: 'depths' was not declared in this scope; did you mean 'depth'?
   68 |     auto& depth = depths[dc_depth];
      |                   ^~~~~~
      |                   depth
race.cpp:69:24: error: 'min_lengths' was not declared in this scope; did you mean 'min_length'?
   69 |     auto& min_length = min_lengths[dc_depth];
      |                        ^~~~~~~~~~~
      |                        min_length
race.cpp:70:10: error: 'function' is not a member of 'std'
   70 |     std::function<void(int, int)> dfs = [&](int v, int p) {
      |          ^~~~~~~~
race.cpp:70:10: note: 'std::function' is defined in header '<functional>'; did you forget to '#include <functional>'?
race.cpp:70:32: error: expression list treated as compound expression in functional cast [-fpermissive]
   70 |     std::function<void(int, int)> dfs = [&](int v, int p) {
      |                                ^
race.cpp:70:19: error: expected primary-expression before 'void'
   70 |     std::function<void(int, int)> dfs = [&](int v, int p) {
      |                   ^~~~
race.cpp:88:5: error: 'dfs' was not declared in this scope
   88 |     dfs(g, -1);
      |     ^~~