제출 #1248904

#제출 시각아이디문제언어결과실행 시간메모리
1248904Ghulam_Junaid경주 (Race) (IOI11_race)C++20
9 / 100
135 ms40228 KiB
#include <bits/stdc++.h> #include "race.h" // #include "grader.cpp" using namespace std; const int N = 2e5 + 10; int n, k, val[N], h[N], ans; vector<pair<int, int>> g[N]; map<int, int> mp[N]; void dfs(int v, int p = -1){ int mxc = -1; for (auto [w, u] : g[v]){ if (u == p) continue; val[u] = val[v] + w; h[u] = h[v] + 1; dfs(u, v); if (mxc == -1 or mp[mxc].size() > mp[u].size()) mxc = u; } if (mxc != -1) swap(mp[mxc], mp[v]); if (mp[v].find(k + val[v]) != mp[v].end()) ans = min(ans, mp[v][k + val[v]] - h[v]); mp[v][val[v]] = h[v]; for (auto [w, u] : g[v]){ if (u == p or u == mxc) continue; for (auto [sm, hei] : mp[u]){ if (mp[v].find(k - sm + 2 * val[v]) != mp[v].end()) ans = min(ans, mp[v][k - sm + 2 * val[v]] + hei - 2 * h[v] + 1); if (mp[v].find(sm) != mp[v].end()) mp[v][sm] = min(mp[v][sm], hei); else mp[v][sm] = hei; } } } int best_path(int nn, int kk, int H[][2], int L[]){ n = nn, k = kk; for (int i = 0; i < n - 1; i ++){ int u = H[i][0], v = H[i][1], w = L[i]; g[u].push_back({w, v}); g[v].push_back({w, u}); } ans = n + 1; dfs(0); if (ans == n + 1) ans = -1; return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...