Submission #714277

#TimeUsernameProblemLanguageResultExecution timeMemory
714277alvingogoHighway Tolls (IOI18_highway)C++14
100 / 100
223 ms11068 KiB
#include "highway.h" #include <bits/stdc++.h> #pragma GCC optimize("Ofast") #define AquA cin.tie(0);ios_base::sync_with_stdio(0); #define fs first #define sc second #define p_q priority_queue using namespace std; struct no{ vector<pair<int,int> > ch; }; vector<no> v; int n; int a,b; long long dis; vector<int> chg; int find_one(int rt,vector<pair<int,int> >& x){ int l=0,r=(int)(x.size())-1; while(r>l){ int mid=(l+r)/2; for(int i=0;i<=mid;i++){ chg[x[i].sc]=1; } if(ask(chg)!=dis){ r=mid; } else{ l=mid+1; } for(int i=0;i<=mid;i++){ chg[x[i].sc]=0; } } return x[l].fs; } void find_pair(int N, vector<int> U, vector<int> V, int A, int B) { a=A; b=B; n=N; v.resize(n); int m=U.size(); for(int i=0;i<m;i++){ v[U[i]].ch.push_back({V[i],i}); v[V[i]].ch.push_back({U[i],i}); } int l=0,r=m-1; chg.resize(m,0); dis=ask(chg); while(r>l){ int mid=(l+r)/2; for(int i=0;i<=mid;i++){ chg[i]=1; } if(ask(chg)==dis){ l=mid+1; } else{ r=mid; } for(int i=0;i<=mid;i++){ chg[i]=0; } } //edge = U[l],V[l]; queue<int> q; vector<int> vis(n); q.push(U[l]); q.push(V[l]); vis[U[l]]=1; vis[V[l]]=-1; vector<pair<int,int> > c,d; c.push_back({U[l],-1}); d.push_back({V[l],-1}); while(q.size()){ auto h=q.front(); q.pop(); for(auto y:v[h].ch){ if(!vis[y.fs]){ vis[y.fs]=vis[h]; q.push(y.fs); if(vis[h]==1){ c.push_back(y); } else{ d.push_back(y); } } } } fill(chg.begin(),chg.end(),1); reverse(c.begin(),c.end()); reverse(d.begin(),d.end()); chg[l]=0; for(auto h:c){ if(h.sc<0){ continue; } chg[h.sc]=0; } for(auto h:d){ if(h.sc<0){ continue; } chg[h.sc]=0; } int e=find_one(U[l],c); int f=find_one(V[l],d); answer(e,f); }
#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...