Submission #1005891

#TimeUsernameProblemLanguageResultExecution timeMemory
1005891irmuunHighway Tolls (IOI18_highway)C++17
51 / 100
216 ms262144 KiB
#include<bits/stdc++.h> #include "highway.h" using namespace std; #define ll long long #define pb push_back #define ff first #define ss second #define all(s) s.begin(),s.end() #define rall(s) s.rbegin(),s.rend() const int maxn=9e4+5; int n,m,a,b; vector<int>u,v; vector<pair<int,int>>adj[maxn]; vector<int>dep(maxn,0),edge(maxn,0),w,L,R,edges; int cur=0; void dfs(int x,int p){ if(cur==0) L.pb(x); else R.pb(x); for(auto [y,e]:adj[x]){ if(y!=p){ if(cur==0){ edges.pb(e); } dep[y]=dep[x]+1; edge[y]=e; dfs(y,x); } } } void find_pair(int N,vector<int>U,vector<int>V,int A, int B){ n=N,u=U,v=V,a=A,b=B; m=u.size(); for(int i=0;i<m;i++){ adj[u[i]].pb({v[i],i}); adj[v[i]].pb({u[i],i}); } w.resize(m); fill(all(w),0); ll C=ask(w); int d=C/A; int l=0,r=m-1; while(l<r){ int mid=(l+r)/2; fill(all(w),0); for(int i=0;i<=mid;i++){ w[i]=1; } if(ask(w)>C){ r=mid; } else{ l=mid+1; } } int v1=u[l],v2=v[l]; dep[v1]=0; dep[v2]=0; dfs(v1,v2); cur=1; dfs(v2,v1); fill(all(w),0); for(auto e:edges){ w[e]=1; } ll cost=ask(w); int dep1=(cost-C)/(ll)(b-a); int dep2=d-dep1-1; vector<int>ver; for(auto i:L){ if(dep[i]==dep1){ ver.pb(i); } } l=0,r=ver.size()-1; while(l<r){ int mid=(l+r)/2; fill(all(w),0); for(int i=0;i<=mid;i++){ w[edge[ver[i]]]=1; } if(ask(w)>C){ r=mid; } else{ l=mid+1; } } int S=ver[l]; ver.clear(); for(auto i:R){ if(dep[i]==dep2){ ver.pb(i); } } l=0,r=ver.size()-1; while(l<r){ int mid=(l+r)/2; fill(all(w),0); for(int i=0;i<=mid;i++){ w[edge[ver[i]]]=1; } if(ask(w)>C){ r=mid; } else{ l=mid+1; } } int T=ver[l]; answer(S,T); return; }
#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...