Submission #974168

#TimeUsernameProblemLanguageResultExecution timeMemory
974168tamir1Closing Time (IOI23_closing)C++17
29 / 100
1070 ms39420 KiB
#include "closing.h" #include <bits/stdc++.h> #include <vector> #define ll long long #define ff first #define ss second using namespace std; vector<pair<int,ll> > v[200001]; ll dis[2][200001]; pair<ll,int> dist[200001]; bitset<3001> vis; void dfs(int x,int p,ll d,bool k){ dis[k][x]=min(dis[k][x],d); for(pair<int,int> i:v[x]){ if(i.ff!=p) dfs(i.ff,x,d+i.ss,k); } } int max_score(int N, int X, int Y, long long K, std::vector<int> U, std::vector<int> V, std::vector<int> W) { for(int i=0;i<N;i++){ v[i].clear(); dis[0][i]=2*K+1; dis[1][i]=2*K+1; } for(int i=0;i<N-1;i++){ v[U[i]].push_back({V[i],W[i]}); v[V[i]].push_back({U[i],W[i]}); } dfs(X,-1,0,0); dfs(Y,-1,0,1); for(int i=0;i<N;i++){ dist[i]={min(dis[0][i],dis[1][i]),i}; } sort(dist,dist+N); ll k=0; int ans=0; for(int i=0;i<N;i++){ if(k+dist[i].ff<=K){ k+=dist[i].ff; ans++; } else break; } if(dis[0][Y]>2*K) return ans; for(int i=0;i<N;i++){ for(int j=i;j<N;j++){ ll sum=0; int tmp=0; vis.reset(); for(int l=i;l<=j;l++){ sum+=max(dis[0][l],dis[1][l]); vis[l]=1; tmp+=2; } if(i>X) for(int l=X;l<i;l++){ sum+=dis[0][l]; tmp++; vis[l]=1; } if(j<Y) for(int l=j+1;l<=Y;l++){ sum+=dis[1][l]; tmp++; vis[l]=1; } if(sum>K) continue; for(int l=0;l<N;l++){ if(vis[dist[l].ss]) continue; if(sum+dist[l].ff<=K){ sum+=dist[l].ff; tmp++; } else break; } ans=max(ans,tmp); } } 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...