제출 #1161482

#제출 시각아이디문제언어결과실행 시간메모리
1161482JahonaliXRace (IOI11_race)C++20
31 / 100
2806 ms327680 KiB
#include <bits/stdc++.h> using namespace std; int best_path(int n, int k, int h[][2], int l[]) { int z = n; vector<vector<pair<int, int>>> a(n); for (int i = 0; i + 1 < n; ++i) a[h[i][0]].emplace_back(h[i][1], l[i]), a[h[i][1]].emplace_back(h[i][0], l[i]); auto dfs = [&] (auto dfs, int i, int p, int w) -> vector<int> { vector<int> dp(k + 1, -1); dp[0] = 0; for (auto [j, wtf] : a[i]) { if (p != j) { auto x = dfs(dfs, j, i, wtf); for (int y = 0; y <= k; ++y) if (~dp[k - y] && ~x[y]) z = min(z, dp[k - y] + x[y]); for (int y = 0; y <= k; ++y) { if (~x[y]) { if (~dp[y]) dp[y] = min(dp[y], x[y]); else dp[y] = x[y]; } } } } for (int y = k - w; y >= 0; --y) { if (dp[y] == -1) dp[y + w] = -1; else dp[y + w] = dp[y] + 1; } for (int y = 0; y < min(k, w); ++y) dp[y] = -1; if (~dp[k]) z = min(z, dp[k]); return dp; }; dfs(dfs, 0, 0, 0); if (z == n) z = -1; return z; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...