제출 #1139063

#제출 시각아이디문제언어결과실행 시간메모리
1139063anmattroi봉쇄 시간 (IOI23_closing)C++17
8 / 100
82 ms21052 KiB
#include "closing.h" #include <bits/stdc++.h> #define fi first #define se second #define maxn 200005 using namespace std; using ii = pair<int, int>; int n, x, y; int64_t k; struct edge { int u, v, l; edge() {} edge(int _u, int _v, int _l) : u(_u), v(_v), l(_l) {} } edges[maxn]; vector<ii> adj[maxn]; int64_t kc[maxn]; int solve() { int ans = 0; for (int i = 0; i < n-1; i++) { auto [u, v, l] = edges[i]; adj[u].emplace_back(v, l); adj[v].emplace_back(u, l); } for (int i = 0; i < n; i++) kc[i] = LLONG_MAX; kc[x] = kc[y] = 0; set<pair<int64_t, int> > q; q.insert({0, x}); q.insert({0, y}); int64_t cr = 0; while (!q.empty()) { auto [D, u] = *q.begin(); q.erase(q.begin()); cr += D; if (cr > k) break; ++ans; for (auto [v, l] : adj[u]) { if (kc[v] > kc[u] + l) { q.erase({kc[v], v}); kc[v] = kc[u] + l; q.insert({kc[v], v}); } } } return ans; } int max_score(int N, int X, int Y, long long K, vector<int> U, vector<int> V, vector<int> W) { n = N; x = X; y = Y; k = K; for (int i = 0; i < n-1; i++) edges[i] = edge(U[i], V[i], W[i]); int ANS = solve(); for (int i = 0; i < n; i++) adj[i].clear(); 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...