제출 #1315199

#제출 시각아이디문제언어결과실행 시간메모리
1315199kutomei3경주 (Race) (IOI11_race)C++20
100 / 100
301 ms76040 KiB
#include "race.h" #include <bits/stdc++.h> using namespace std; int mn = INT_MAX; map<int, int> dfs(vector<pair<int, int>> ap[], int cur, int par, int l, int h, int k) { map<int, int> mp; mp[l] = h; //cout << cur << '\n'; for (auto& [p, len] : ap[cur]) { if (p == par) continue; map<int, int> mp2 = dfs(ap, p, cur, l + len, h + 1, k); if (mp2.size() > mp.size()) swap(mp, mp2); for (auto& [v, d] : mp2) { if (mp.find(k + 2 * l - v) != mp.end()) mn = min(d + mp[k + 2 * l - v] - 2 * h, mn); } for (auto& [v, d] : mp2) { if (mp.find(v) != mp.end()) mp[v] = min(mp[v], d); else mp[v] = d; } } // cout << cur << '\n'; // for (auto& p : mp) cout << p.first << ' ' << p.second << '\n'; // cout << '\n'; return mp; } int best_path(int n, int k, int h[][2], int l[]) { vector<pair<int, int>> ap[n + 1]; for (int i = 0; i < n - 1; i++) { ap[h[i][0]].push_back({h[i][1], l[i]}); ap[h[i][1]].push_back({h[i][0], l[i]}); } dfs(ap, 0, -1, 0, 0, k); return (mn == INT_MAX ? -1 : mn); } /** mp: curlen, min - dep a + b - 2 * lca(a, b) = k */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...