제출 #1302810

#제출 시각아이디문제언어결과실행 시간메모리
1302810BehruzbekX경주 (Race) (IOI11_race)C++20
0 / 100
3095 ms9876 KiB
#include <bits/stdc++.h> using namespace std; constexpr int N = 2e5 + 1; vector<pair<int, long long>> a[N]; map<long long, long long> mn[N]; long long ans = LONG_LONG_MAX; int dist[N], sum[N], n, k; void dfs(int v, int p){ mn[v][sum[v]] = dist[v]; for (auto [u, w] : a[v]) { if (u != p) { sum[u] = sum[v] + w; dist[u] = dist[v] + 1; dfs(u, v); } } int g = k + 2 * sum[v]; for (auto &[u, w] : a[v]) { if (u != p) { dfs(u, v); if (mn[v].size() < mn[u].size()) { swap(mn[v], mn[u]); } for (auto [x, y] : mn[u]) { if (mn[v].count(g - x)) { ans = min(ans, y + mn[v][g - x] - 2 * dist[v]); } } for (auto [x, y] : mn[u]) { if (mn[v].count(x)) { mn[v][x] = min(mn[v][x], y); } else mn[v][x] = y; } } } }; int best_path (int _n, int _k, int h[][2], int l[]) { n = _n, k = _k; for (int i = 0; i < n - 1; i++) { a[h[i][0]].emplace_back(h[i][1], l[i]); a[h[i][1]].emplace_back(h[i][0], l[i]); } dfs(0, -1); return (ans == INT_MAX ? -1 : 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...