Submission #1229629

#TimeUsernameProblemLanguageResultExecution timeMemory
1229629vladiliusClosing Time (IOI23_closing)C++20
8 / 100
97 ms23364 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<int, int>; #define pb push_back #define ff first #define ss second const ll inf = 1e18; int max_score(int n, int x, int y, ll k, vector<int> u, vector<int> v, vector<int> w){ x++; y++; for (int i = 0; i < (n - 1); i++){ u[i]++; v[i]++; } vector<pii> g[n + 1]; for (int i = 0; i < (n - 1); i++){ g[u[i]].pb({v[i], w[i]}); g[v[i]].pb({u[i], w[i]}); } vector<ll> dx(n + 1, inf), dy(n + 1, inf); queue<int> q; q.push(x); dx[x] = 0; while (!q.empty()){ int v = q.front(); q.pop(); for (auto [u, w]: g[v]){ if (dx[u] == inf){ dx[u] = dx[v] + w; q.push(u); } } } q.push(y); dy[y] = 0; while (!q.empty()){ int v = q.front(); q.pop(); for (auto [u, w]: g[v]){ if (dy[u] == inf){ dy[u] = dy[v] + w; q.push(u); } } } sort(dx.begin() + 1, dx.end()); sort(dy.begin() + 1, dy.end()); vector<ll> p1(n + 1), p2(n + 1); for (int i = 1; i <= n; i++){ p1[i] = p1[i - 1] + dx[i]; p2[i] = p2[i - 1] + dy[i]; } int j = n, out = 0; for (int i = 1; i <= n; i++){ if (p1[i] > k) break; while (j && (p1[i] + p2[j]) > k) j--; out = max(out, i + j); } return out; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...