Submission #587232

#TimeUsernameProblemLanguageResultExecution timeMemory
587232jasminHighway Tolls (IOI18_highway)C++14
0 / 100
16 ms1768 KiB
#include<bits/stdc++.h> using namespace std; #include<highway.h> const int inf=1e9+7; /*int64_t ask(vector<int> w){ return 0; } void answer(int a, int b){ }*/ int find_edge(int m, int64_t dist){ vector<int> w(m, 0); int l=0; int r=m-1; int ans=m-1; while(l<=r){ int mi=l+(r-l)/2; w.assign(m, 0); for(int i=0; i<=mi; i++){ w[i]=1; } int64_t resp=ask(w); if(resp!=dist){ ans=mi; r=mi-1; } else{ l=mi+1; } } return ans; } void dfs(int v, int d, vector<vector<int> >& adi, vector<bool>& vis, vector<int>& cand, int dist){ if(vis[v]) return; vis[v]=true; if(d==dist){ cand.push_back(v); } for(auto u: adi[v]){ dfs(u, d+1, adi, vis, cand, dist); } } int find_node(vector<int>& cand, vector<vector<int> >& con, int m, int dist){ vector<int> w(m, 0); int l=0; int r=cand.size()-1; int ans=r; while(l<=r){ int mi=l+(r-l)/2; w.assign(m, 0); for(int i=0; i<=mi; i++){ for(auto x: con[i]){ w[x]=1; } } int resp=ask(w); if(resp!=dist){ ans=mi; r=mi-1; } else{ l=mi+1; } } return ans; } void find_pair(int n, vector<int> u, vector<int> v, int A, int B){ int m=u.size(); vector<int> w(m, 0); vector<int> cand; int64_t dist=ask(w); int length=dist/(int64_t)A; int x=find_edge(m, dist); vector<bool> vis(n); vector<vector<int> > adi(n); vector<vector<int> > con(n); for(int i=0; i<m; i++){ if(i==x) continue; adi[v[i]].push_back(u[i]); adi[u[i]].push_back(v[i]); con[v[i]].push_back(i); con[u[i]].push_back(i); } con[v[x]].push_back(x); con[u[x]].push_back(x); dfs(u[x], 0, adi, vis, cand, inf); w.assign(n, 0); for(int i=0; i<n; i++){ if(!vis[i]) continue; for(auto j: con[i]){ w[j]=1; } } int length1=(ask(w)-dist)/(B-A); int64_t dist1=length1*A; int length2=length-1-length1; int64_t dist2=length2*A; vis.assign(n, false); cand.assign(0, 0); dfs(u[x], 0, adi, vis, cand, length1); int a=find_node(cand, con, m, dist); vis.assign(n, false); cand.assign(0, 0); dfs(v[x], 0, adi, vis, cand, length2); int b=find_node(cand, con, m, dist); answer(a, b); } /*signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); }*/

Compilation message (stderr)

highway.cpp: In function 'void find_pair(int, std::vector<int>, std::vector<int>, int, int)':
highway.cpp:106:13: warning: unused variable 'dist1' [-Wunused-variable]
  106 |     int64_t dist1=length1*A;
      |             ^~~~~
highway.cpp:108:13: warning: unused variable 'dist2' [-Wunused-variable]
  108 |     int64_t dist2=length2*A;
      |             ^~~~~
#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...