Submission #988583

#TimeUsernameProblemLanguageResultExecution timeMemory
988583GrayClosing Time (IOI23_closing)C++17
17 / 100
91 ms31816 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<int>> A; ll n, x, y, k; vector<pair<ll, pair<ll, ll>>> edge; ll dijkstra(){ priority_queue<pair<ll, pair<ll, ll>>, vector<pair<ll, pair<ll, ll>>>, greater<pair<ll, pair<ll, ll>>>> que; que.push({0, {x, 0}}); que.push({0, {y, 1}}); vector<vector<ll>> reachable(n, vector<ll>(2, -1)); while (!que.empty()){ auto cur = que.top(); que.pop(); if (reachable[cur.ss.ff][cur.ss.ss]!=-1){ continue; } if (reachable[cur.ss.ff][cur.ss.ss^1]!=-1){ if (k+reachable[cur.ss.ff][cur.ss.ss^1]-cur.ff<0) continue; }else{ if (k<cur.ff) continue; } // cout << cur.ss << ln; if (reachable[cur.ss.ff][cur.ss.ss^1]!=-1) k+=reachable[cur.ss.ff][cur.ss.ss^1]; reachable[cur.ss.ff][cur.ss.ss]=cur.ff; k-=cur.ff; for (auto i:A[cur.ss.ff]){ auto v = edge[i].ss.ff^edge[i].ss.ss^cur.ss.ff; if (reachable[v][cur.ss.ss]!=-1) continue; if (reachable[v][cur.ss.ss^1]!=-1){ if (k+reachable[v][cur.ss.ss^1]<cur.ff+edge[i].ff) continue; }else{ if (k<cur.ff+edge[i].ff) continue; } que.push({cur.ff+edge[i].ff, {v, cur.ss.ss}}); } } ll ans=0; for (ll i=0; i<n; i++) { if (reachable[i][0]!=-1) { ans++; } if (reachable[i][1]!=-1){ ans++; } } 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.assign(N, vector<int>()); 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 dijkstra(); }
#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...