제출 #1305469

#제출 시각아이디문제언어결과실행 시간메모리
1305469aaaaaaaaClosing Time (IOI23_closing)C++20
0 / 100
267 ms60276 KiB
#include "closing.h" #include <bits/stdc++.h> using namespace std; const int mxN = 2e5 + 100; int max_score(int N, int X, int Y, long long K, vector<int> U, vector<int> V, vector<int> W) { vector<pair<int, int>> adj[N + 5]; for(int i = 0; i < (int) U.size(); ++i){ adj[U[i]].push_back({V[i], W[i]}); adj[V[i]].push_back({U[i], W[i]}); } queue<pair<long long, int>> q; vector<bool> vis(N + 5, 0); vector<pair<long long, int>> dist; int ans = 0; q.push({0, X}); vis[X] = 1; while(q.size()){ auto tp = q.front(); q.pop(); dist.push_back({tp.first, tp.second}); vis[tp.second] = 1; for(auto it : adj[tp.second]){ if(!vis[it.first]){ q.push({(long long) it.second + tp.first, it.first}); vis[it.first] = 1; } } } while(q.size()) q.pop(); for(int i = 0; i <= N + 2; ++i) vis[i] = 0; q.push({0, Y}); vis[Y] = 1; while(q.size()){ auto tp = q.front(); q.pop(); dist.push_back({tp.first, tp.second}); vis[tp.second] = 1; for(auto it : adj[tp.second]){ if(!vis[it.first]){ q.push({(long long) it.second + tp.first, it.first}); vis[it.first] = 1; } } } sort(dist.begin(), dist.end()); set<tuple<int, int, int>> st; vector<int> xd[N + 5]; for(auto it : dist){ xd[it.second].push_back(it.first); st.insert({it.first, 0, it.second}); } vector<int> eww(N + 5, -1); while(st.size()){ auto [cost, _, node] = *st.begin(); st.erase(st.begin()); if(cost > K) break; K -= cost, K += -_, ans += 1; if(eww[node] == -1) { for(auto it : xd[node]){ st.erase({it, 0, node}); } if(xd[node][0] == cost) swap(xd[node][0], xd[node][1]); st.insert({xd[node][0], -cost, node}); eww[node] = 0; } } 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...