제출 #1302814

#제출 시각아이디문제언어결과실행 시간메모리
1302814BehruzbekX경주 (Race) (IOI11_race)C++20
100 / 100
360 ms103992 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; long long dist[N], sum[N]; int 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); } } } void dfs(int v, int p){ long long 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); dfs(0, -1); return (ans == LONG_LONG_MAX ? -1 : ans); } // int h[20][2], l[20]; // int main() { // int n, k; // cin >> n >> k; // for (int i = 0; i < n - 1; i++) { // int x, y, w; // cin >> x >> y >> w; // h[i][0] = x, h[i][1] = y, l[i] = w; // } // cout << best_path(n, k, h, l); // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...