제출 #373952

#제출 시각아이디문제언어결과실행 시간메모리
373952duchung경주 (Race) (IOI11_race)C++17
100 / 100
522 ms89708 KiB
#define ii pair<int , int> #include <race.h> #include <bits/stdc++.h> using namespace std; const int N = 2e5 + 5; int _k , ans = 1e9; int dist[N] , depth[N]; vector<ii> adj[N]; set<ii> S[N]; void dfs(int u , int p = -1) { S[u].insert(make_pair(dist[u] , depth[u])); for (auto e : adj[u]) { int v = e.first; int w = e.second; if (v == p) continue; dist[v] = dist[u] + w; depth[v] = depth[u] + 1; dfs(v , u); if (S[u].size() < S[v].size()) swap(S[u] , S[v]); for (auto x : S[v]) { auto it = S[u].lower_bound(make_pair(_k - x.first + 2 * dist[u] , 0)); if (it != S[u].end() && it->first + x.first - 2 * dist[u] == _k) ans = min(ans , it->second + x.second - 2 * depth[u]); } for (auto x : S[v]) { S[u].insert(x); } } } int best_path(int n, int k, int H[][2], int L[]) { _k = k; for (int i = 0; i < n - 1; i++) { ++H[i][0] , ++H[i][1]; adj[H[i][0]].push_back(make_pair(H[i][1], L[i])); adj[H[i][1]].push_back(make_pair(H[i][0], L[i])); } dfs(1); return (ans == 1e9 ? -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...