제출 #1108160

#제출 시각아이디문제언어결과실행 시간메모리
1108160keunbum경주 (Race) (IOI11_race)C++14
0 / 100
1 ms2384 KiB
#include "race.h"

#include <bits/stdc++.h>

using namespace std;

int best_path(int N, int K, int H[][2], int L[])
{
  int n = N;
  int k = K;
  vector<vector<pair<int, int>>> g(n);
  for (int i = 0; i < n - 1; ++i) {
    int x = H[i][0];
    int y = H[i][1];
    int z = L[i];
    g[x].emplace_back(y, z);
    g[y].emplace_back(x, z);
  }
  vector<bool> removed(n, false);
  auto GetCenter = [&](int r) {
    vector<int> sz(n);
    vector<int> pv(n);
    auto DFS = [&](auto&& self, int v) -> void {
      sz[v] = 1;
      for (auto [u, _] : g[v]) {
        if (u != pv[v] && !removed[u]) {
          pv[u] = v;
          self(self, u);
          sz[v] += sz[u];
        }
      }
    };
    pv[r] = -1;
    DFS(DFS, r);
    while (true) {
      int nr = -1;
      for (auto [u, _] : g[r]) {
        if (u != pv[r] && !removed[u] && sz[u] * 2 > sz[r]) {
          nr = u;
          break;
        }
      }
      if (nr == -1) {
        return r;
      }
      r = nr;
    }
  };     
  vector<int> dp(k + 1, n);
  auto Find = [&](auto&& self, int v, int pv, int dist, int edges) -> void {
    for (auto [u, w] : g[v]) {
      if (u != pv && dist + w <= k && !removed[u]) {
        dp[dist + w] = min(dp[dist + w], edges + 1);
        dp[k] = min(dp[k], dp[k - w] + 1);
        self(self, u, v, dist + w, edges + 1);
      }
    }
  };
  auto Solve = [&](auto&& self, int v) -> void {
    int c = GetCenter(v);
    removed[c] = true;
    Find(Find, c, -1, 0, 0);
    for (auto [u, _] : g[c]) {
      if (!removed[u]) {
        self(self, u);
      }
    }
  };
  Solve(Solve, 0);
  return (dp[k] == n ? -1 : dp[k]);
}

컴파일 시 표준 에러 (stderr) 메시지

race.cpp: In lambda function:
race.cpp:25:17: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   25 |       for (auto [u, _] : g[v]) {
      |                 ^
race.cpp: In lambda function:
race.cpp:37:17: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   37 |       for (auto [u, _] : g[r]) {
      |                 ^
race.cpp: In lambda function:
race.cpp:51:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   51 |     for (auto [u, w] : g[v]) {
      |               ^
race.cpp: In lambda function:
race.cpp:63:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   63 |     for (auto [u, _] : g[c]) {
      |               ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...