제출 #841912

#제출 시각아이디문제언어결과실행 시간메모리
841912I_love_Hoang_Yen봉쇄 시간 (IOI23_closing)C++17
0 / 100
103 ms25288 KiB
#include "closing.h" #include <bits/stdc++.h> using namespace std; using Graph = vector<vector<pair<int,int>>>; void dfs(int u, int fu, const Graph& g, vector<int>& dists) { for (auto [v, w] : g[u]) { if (v == fu) continue; assert(dists[v] < 0); dists[v] = dists[u] + w; dfs(v, u, g, dists); } } vector<int> get_dists(int u, const Graph& g) { int n = g.size(); vector<int> dists(n, -1); dists[u] = 0; dfs(u, -1, g, dists); return dists; } // dists(x, y) > 2*k int sub1(int n, const Graph& g, int k, const vector<int>& distsX, const vector<int>& distsY) { vector<int> dists; for (int i = 0; i < n; ++i) { dists.push_back(min(distsX[i], distsY[i])); } sort(dists.begin(), dists.end()); int res = 0; for (int d : dists) { if (d > k) break; k -= d; ++res; } return res; } int max_score(int n, int X, int Y, long long K, vector<int> U, vector<int> V, vector<int> W) { Graph g(n); assert(int(U.size()) == n-1); assert(int(V.size()) == n-1); assert(int(W.size()) == n-1); for (int i = 0; i < n - 1; i++) { int u = U[i]; int v = V[i]; int w = W[i]; g[u].emplace_back(v, w); g[v].emplace_back(u, w); } auto distsX = get_dists(X, g); auto distsY = get_dists(Y, g); return sub1(n, g, K, distsX, distsY); }
#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...