Submission #1130990

#TimeUsernameProblemLanguageResultExecution timeMemory
1130990eshaanaggRace (IOI11_race)C++20
0 / 100
0 ms320 KiB
#include <bits/stdc++.h> using namespace std; void updateWithMin(map<int, int> &a, int k, int v) { if (a.find(k) == a.end()) a[k] = v; else a[k] = min(a[k], v); } void merge(map<int, int> &a, map<int, int> &b, int l, int &minPath, int totalDis) { if (a.size() < b.size()) swap(a, b); for (auto [nk, v] : b) { int k = nk - l; // Find a complementary path if (a.find(totalDis - k) != a.end()) minPath = min(minPath, a[totalDis - k] + v + 1); updateWithMin(a, k, v + 1); if (k == 0) minPath = min(minPath, v + 1); } } int best_path(int n, int k, int edges[][2], int wt[]) { vector<vector<pair<int, int>>> g(n); for (int i = 0; i < n - 1; i++) { int u = edges[i][0], v = edges[i][1], w = wt[i]; g[u].push_back({v, w}); g[v].push_back({u, w}); } vector<map<int, int>> paths(n); for (int i = 0; i < n; i++) paths[i][k] = 0; int minPaths = n + 1; function<void(int, int)> dfs = [&](int u, int p) { for (auto [v, w] : g[u]) { if (v == p) continue; dfs(v, u); merge(paths[u], paths[v], w, minPaths, k); } }; dfs(0, -1); return minPaths == n + 1 ? -1 : minPaths; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...