제출 #1069277

#제출 시각아이디문제언어결과실행 시간메모리
1069277golf봉쇄 시간 (IOI23_closing)C++17
0 / 100
149 ms47952 KiB
#include <bits/stdc++.h> using namespace std; #define vec vector typedef long long ll; void dfs(ll u, ll p, vec<ll> &dist, vec<vec<pair<ll, ll>>> &adj) { for (auto [v, w] : adj[u]) { if (v == p) continue; dist[v] = dist[u] + w; dfs(v, u, dist, adj); } } ll max_score_ll(ll N, ll X, ll Y, ll K, vec<ll> U, vec<ll> V, vec<ll> W) { vec<vec<pair<ll, ll>>> adj(N); for (ll i = 0; i < N - 1; i++) { adj[U[i]].emplace_back(V[i], W[i]); adj[V[i]].emplace_back(U[i], W[i]); } vec<ll> dist_x(N), dist_y(N); dfs(X, -1, dist_x, adj); dfs(Y, -1, dist_y, adj); ll ans = 0; vec<ll> dist(N * 2); for (int x: dist_x) dist.emplace_back(x); for (int y: dist_y) dist.emplace_back(y); sort(dist.begin(), dist.end(), greater<ll>()); ll sum = 0; for (int d: dist) { sum += d; if (sum > K) break; ans++; } return ans; } int max_score(int N, int X, int Y, ll K, vec<int> U, vec<int> V, vec<int> W) { vec<ll> _U(N - 1), _V(N - 1), _W(N - 1); for (int i = 0; i < N - 1; i++) { _U[i] = U[i]; _V[i] = V[i]; _W[i] = W[i]; } return max_score_ll(N, X, Y, K, _U, _V, _W); }
#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...