제출 #1032421

#제출 시각아이디문제언어결과실행 시간메모리
1032421Turkhuu봉쇄 시간 (IOI23_closing)C++17
0 / 100
92 ms27944 KiB
#include "closing.h" #include <bits/stdc++.h> using namespace std; using ll = long long; int max_score(int N, int X, int Y, ll K, vector<int> U, vector<int> V, vector<int> W) { vector<vector<array<int, 2>>> adj(N); for (int i = 0; i < N - 1; i++) { adj[U[i]].push_back({V[i], W[i]}); adj[V[i]].push_back({U[i], W[i]}); } auto bfs = [&](int s) { vector<ll> dis(N); vector<int> from(N, -1); from[s] = s; queue<int> q; q.push(s); while (!q.empty()) { int x = q.front(); q.pop(); for (auto [y, z] : adj[x]) { if (from[y] == -1) { from[y] = x; dis[y] = dis[x] + z; q.push(y); } } } return make_pair(dis, from); }; auto [dis_x, from_x] = bfs(X); auto [dis_y, from_y] = bfs(Y); vector<int> one(N), two(N); for (int i = 0; i < N; i++) { tie(one[i], two[i]) = minmax(dis_x[i], dis_y[i]); } vector<int> path{X}; while (path.back() != Y) path.push_back(from_y[path.back()]); sort(one.begin(), one.end()); ll sum = 0; int ans = 0; while (ans < N && sum + one[ans] <= K) sum += one[ans++]; 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...
#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...