Submission #1060404

#TimeUsernameProblemLanguageResultExecution timeMemory
1060404n1kClosing Time (IOI23_closing)C++17
8 / 100
99 ms38196 KiB
#include "closing.h" #include <bits/stdc++.h> using namespace std; using ll = long long; int max_score(int N, int X, int Y, long long K, vector<int> U, vector<int> V, vector<int> W){ vector<vector<array<int, 2>>> g(N); vector c(2, vector<ll>(N)); for(int i=0; i<N-1; i++){ g[U[i]].push_back({V[i], W[i]}); g[V[i]].push_back({U[i], W[i]}); } function<void(int, int, vector<ll>&)> dfs = [&](int u, int p, vector<ll> &c){ for(auto [v, cost]:g[u]){ if(v==p){ continue; } c[v]+=c[u] + cost; dfs(v, u, c); } }; dfs(X, -1, c[0]); dfs(Y, -1, c[1]); int ans = 0; vector vis(2, vector<int>(N)); priority_queue<array<ll, 3>, vector<array<ll, 3>>, greater<array<ll, 3>>> pq; // (cost, node, start x or y) pq.push({0, X, 0}); pq.push({0, Y, 1}); while(pq.size()){ auto [cost, u, start] = pq.top(); pq.pop(); if(vis[start][u]){ continue; } vis[start][u]=1; if(K<cost){ break; } cerr << u << " " << cost << " " << start << endl; ans++; K-=cost; for(auto [v, _]:g[u]){ pq.push({c[start][v], v, start}); } } 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...