Submission #1069538

#TimeUsernameProblemLanguageResultExecution timeMemory
1069538Muhammad_AneeqClosing Time (IOI23_closing)C++17
8 / 100
126 ms42740 KiB
#include <vector> #include <queue> #include <algorithm> using namespace std; int const MAXN=2e5+10; vector<pair<int,int>>nei[MAXN]={}; long long dis[2][MAXN]={}; bool uni=0; vector<pair<long long,int>>d[2]; void dfs(int u,int p=-1) { d[uni].push_back({dis[uni][u],u}); for (auto [i,w]:nei[u]) { if (i==p) continue; dis[uni][i]=dis[uni][u]+w; dfs(i,u); } } int max_score(int N, int X, int Y, long long K, vector<int> U,vector<int> V, vector<int> W) { for (int i=0;i<N;i++) nei[i]={},dis[0][i]=dis[1][i]=0; d[0]=d[1]={}; uni=0; for (int i=0;i<N-1;i++) { nei[U[i]].push_back({V[i],W[i]}); nei[V[i]].push_back({U[i],W[i]}); } dfs(X); uni=1; dfs(Y); for (int i=0;i<2;i++) sort(begin(d[i]),end(d[i])); int i=0,j=0; int cnt=0; while (i<N&&j<N) { long long z=1e11; if (i<N) z=d[0][i].first; if (j<N) z=min(z,d[1][j].first); if (z>K) break; else K-=z; if (i<N&&j<N) { if (d[0][i].first<d[1][j].first) { cnt++;i++; } else { cnt++;j++; } } else if (i==N) { cnt++; j++; } else cnt++,i++; } return cnt; }
#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...