Submission #980123

#TimeUsernameProblemLanguageResultExecution timeMemory
980123vjudge1Closing Time (IOI23_closing)C++17
21 / 100
1113 ms1700460 KiB
#include "closing.h" using namespace std; #include <bits/stdc++.h> #define pb push_back using lli=long long; #define deb(x) cout<<#x<<": "<<x<<endl; int max_score(int N, int X, int Y, long long K, vector<int> U, vector<int> V, vector<int> W) { int ans=0; vector<vector<pair<lli,lli>>> adj (N); vector<vector<lli>> mat (N, vector<lli> (N, -1)); for(lli i=0; i<N-1; ++i){ adj[U[i]].pb({W[i], V[i]}); adj[V[i]].pb({W[i], U[i]}); mat[U[i]][V[i]]=W[i]; mat[V[i]][U[i]]=W[i]; } int ini=0; int ant=0; while(adj[ini].size()!=1){ if(adj[ini][0].second!=ant){ ant=ini; ini=adj[ini][0].second; } else{ ant=ini; ini=adj[ini][1].second; } } int last=adj[ini][0].second; ant=ini; while(adj[last].size()!=1){ if(adj[last][0].second!=ant){ ant=last; last=adj[last][0].second; } else{ ant=last; last=adj[last][1].second; } } vector<int> ord; ord.pb(ini); int rec=adj[ini][0].second; while(rec!=last){ ord.pb(rec); if(adj[rec][0].second!=ord[ord.size()-2]){ rec=adj[rec][0].second; } else{ rec=adj[rec][1].second; } } ord.pb(rec); vector<int> pos (N); for(int i=0; i<N; ++i){ pos[ord[i]]=i; } for(int i=pos[X]; i>=0; --i){ vector<int> values(N,0); lli cant=K; for(lli a=pos[X]-1; a>=i; --a){ values[a]=values[a+1]+mat[ord[a]][ord[a+1]]; cant-=values[a]; } lli help=cant; if(cant<0) break; for(lli j=pos[X]; j<N; ++j){ cant=help; if(j!=pos[X]){ values[j]=values[j-1]+mat[ord[j]][ord[j-1]]; help-=values[j]; cant-=values[j]; } if(cant<0) break; priority_queue<pair<pair<lli,lli>, lli>, vector<pair<pair<lli,lli>, lli>>, greater<pair<pair<lli,lli>, lli>>> pq; pq.push({{0,0}, pos[Y]}); int aux=j-i+1; vector<bool> visited(N, false); while(!pq.empty()){ lli a=pq.top().first.first; lli b=pq.top().first.second; lli c=pq.top().second; pq.pop(); if(visited[c]) continue; visited[c]=true; if(cant<a) break; aux++; cant-=a; if(c+1<N && !visited[c+1]){ pq.push({{max(b+mat[ord[c]][ord[c+1]]-values[c+1],0ll), b+mat[ord[c]][ord[c+1]]}, c+1}); } if(c-1>=0 && !visited[c-1]){ pq.push({{max(b+mat[ord[c]][ord[c-1]]-values[c-1],0ll), b+mat[ord[c]][ord[c-1]]}, c-1}); } } ans=max(ans,aux ); } } 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...