제출 #639185

#제출 시각아이디문제언어결과실행 시간메모리
639185finn__Race (IOI11_race)C++17
43 / 100
3085 ms220212 KiB
#include <bits/stdc++.h> using namespace std; #include "race.h" vector<map<size_t, size_t>> g; // dp[i][j] holds the minimum size of a path ending at i and having total cost j. vector<vector<size_t>> dp; size_t min_size = SIZE_MAX; void dfs(size_t u, size_t p, size_t k) { dp[u][0] = 0; for (auto [v, w] : g[u]) { if (v != p) { dfs(v, u, k); for (size_t j = w; j <= k; j++) if (dp[v][j - w] < SIZE_MAX && dp[u][k - j] < SIZE_MAX) min_size = min(min_size, dp[v][j - w] + dp[u][k - j] + 1); for (size_t j = w; j <= k; j++) if (dp[v][j - w] < SIZE_MAX) dp[u][j] = min(dp[u][j], dp[v][j - w] + 1); } } min_size = min(min_size, dp[u].back()); } void test_all(size_t n, size_t u, size_t k) { vector<size_t> dis(n, SIZE_MAX); vector<size_t> steps(n); queue<size_t> q; dis[u] = 0; steps[u] = 0; q.push(u); while (!q.empty()) { size_t x = q.front(); q.pop(); if (dis[x] == k) { min_size = min(min_size, steps[x]); return; } if (dis[x] < k) { for (auto [v, w] : g[x]) { if (dis[v] == SIZE_MAX) { dis[v] = dis[x] + w; steps[v] = steps[x] + 1; q.push(v); } } } } } int best_path(int n, int k, int edges[][2], int length[]) { g = vector<map<size_t, size_t>>(n); for (size_t i = 0; i < n - 1; i++) { size_t u = edges[i][0], v = edges[i][1], w = length[i]; g[u][v] = w; g[v][u] = w; }; if (k > 200) { for (size_t i = 0; i < n; i++) test_all(n, i, k); return min_size == SIZE_MAX ? -1 : min_size; } dp = vector<vector<size_t>>(n, vector<size_t>(k + 1, SIZE_MAX)); dfs(0, 0, k); return min_size == SIZE_MAX ? -1 : min_size; }

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

race.cpp: In function 'int best_path(int, int, int (*)[2], int*)':
race.cpp:73:26: warning: comparison of integer expressions of different signedness: 'size_t' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   73 |     for (size_t i = 0; i < n - 1; i++)
      |                        ~~^~~~~~~
race.cpp:82:30: warning: comparison of integer expressions of different signedness: 'size_t' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   82 |         for (size_t i = 0; i < n; i++)
      |                            ~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...