Submission #933508

#TimeUsernameProblemLanguageResultExecution timeMemory
933508MaaxleRace (IOI11_race)C++17
0 / 100
1 ms2392 KiB
#include "race.h" #include <bits/stdc++.h> #define range(it, a, b) for (ll it = a; it < b; it++) #define all(x) begin(x), end(x) #define ll long long #define ull unsigned long long #define INF64 ((ll) 1 << 60) #define INF32 (1 << 30) #define mset multiset #define uset unordered_set #define umap unordered_map #define pqueue priority_queue #define ptr(A) shared_ptr<A> using namespace std; struct Path { ll i, w; }; ll n, k; vector<vector<Path>> adj; // DISTANCE, NO. OF ROADS vector<map<ll, ll>> paths; ll ans = INF64; void explore(ll i, ll from) { paths[i][0] = 0; for (Path child : adj[i]) { if (child.i != from) { explore(child.i, i); if (paths[i].size() < paths[child.i].size()) swap(paths[child.i], paths[i]); for (auto child_path : paths[child.i]) { ll dist = child.w + child_path.first; if (paths[i].count(k - dist)) ans = min(ans, paths[i][k - dist] + 1 + child_path.second); } for (auto child_path : paths[child.i]) { ll dist = child.w + child_path.first; if (!paths[i].count(dist)) paths[i][dist] = 1 + child_path.second; else paths[i][dist] = min(paths[i][dist], 1 + child_path.second); } } } } int best_path(int N, int K, int H[][2], int L[]) { n = N; k = K; adj.resize(n); paths.resize(n); range(i, 0, n) { adj[H[i][0]].push_back({H[i][1], L[i]}); adj[H[i][1]].push_back({H[i][0], L[i]}); } explore(0, 0); return (ans == INF64 ? -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...