Submission #1158341

#TimeUsernameProblemLanguageResultExecution timeMemory
1158341eudhsyfRace (IOI11_race)C++20
0 / 100
3 ms5696 KiB
#include <bits/stdc++.h> #include "race.h" using namespace std; #define fi first #define pb push_back #define eb emplace_back #define se second typedef long long ll; using pii = pair<int, int>; const int nmax = 2e5 + 5, inf = 1e9; int n, k, h[nmax][2], l[nmax]; int vis[nmax], sz[nmax]; vector<pii> adj[nmax]; unordered_map<int, int> mpa, mp; int size(int u, int p = -1) { sz[u] = 1; for (auto [v, w] : adj[u]) { if (v != p && !vis[v]) { sz[u] += size(v, u); } } return sz[u]; } int find(int u, int n, int p = -1) { for (auto [v, w] : adj[u]) { if (v != p && !vis[v] && sz[v] >= n / 2) { return find(v, n, u); } } return u; } void cal(int u, int depth, int k, int cnt, int p = -1) { if (depth > k) { return; } if (mp.count(depth) == 0) mp[depth] = cnt; else mp[depth] = min(mp[depth], cnt); for (auto [v, w] : adj[u]) { if (vis[v] || v == p) { continue; } cal(v, depth + w, k, cnt + 1, u); } } int ans = inf; void dfs_cal(int u, int k) { int cent = find(u, size(u)); if (vis[cent]) return; vis[cent] = true; mpa[0] = 0; for (auto [v, w] : adj[cent]) { if (vis[v]) continue; cal(v, w, k, 1); for (auto x : mp) { if (k - x.fi < 0 || mpa.count(k - x.fi) == 0) continue; ans = min(ans, x.se + mpa[k - x.fi]); } for (auto x : mp) { if (mpa.count(x.fi) == 0) mpa[x.fi] = x.se; else mpa[x.fi] = min(mpa[x.fi], x.se); } mp.clear(); } mpa.clear(); for (auto [v, w] : adj[cent]) { if (!vis[v]) { dfs_cal(v, k); } } } int best_path(int n, int k, int h[][2], int l[]) { memset(vis, 0, sizeof(vis)); for (int i = 1; i < n; i++) { h[i][0] ++, h[i][1] ++; adj[h[i][0]].emplace_back(h[i][1], l[i]); adj[h[i][1]].emplace_back(h[i][0], l[i]); } dfs_cal(1, k); if (ans == inf) return -1; return 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...