Submission #988593

#TimeUsernameProblemLanguageResultExecution timeMemory
988593GrayClosing Time (IOI23_closing)C++17
8 / 100
157 ms45916 KiB
#include "closing.h" #include <bits/stdc++.h> #include <functional> #include <queue> #define ll long long #define ff first #define ss second #define ln endl using namespace std; vector<vector<ll>> A; ll n, x, y, k; vector<pair<ll, pair<ll, ll>>> edge; void dfs(ll u, ll p, vector<pair<ll, ll>> &reach, ll cd){ reach.push_back({cd, u}); for (auto i:A[u]){ ll v = edge[i].ss.ff^edge[i].ss.ss^u; if (v==p) continue; dfs(v, u, reach, cd+edge[i].ff); } } ll simple(){ vector<pair<ll, ll>> reach; dfs(x, -1, reach, 0); dfs(y, -1, reach, 0); vector<ll> dist(n); sort(reach.begin(), reach.end()); // cout << reach.size() << endl; // for (auto ch:reach){ // cout << ch.ff << "|" << ch.ss << endl; // } ll ans=0; for (ll i=0; i<2*n; i++){ if (k+dist[reach[i].ss]-reach[i].ff>=0){ // cout << reach[i].ff << "|" << reach[i].ss << " "; k=k+dist[reach[i].ss]-reach[i].ff; dist[reach[i].ss]=reach[i].ff; ans++; }else break; } // cout << endl; return ans; } int max_score(int N, int X, int Y, long long K, std::vector<int> U, std::vector<int> V, std::vector<int> W) { A.clear(); edge.clear(); A.resize(N); edge.resize(N-1); n=N; x=X; y=Y; k=K; for (ll i=0; i<n-1; i++){ A[U[i]].push_back(i); A[V[i]].push_back(i); edge[i]={W[i],{V[i], U[i]}}; } return simple(); }
#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...