# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
586429 | jasmin | Highway Tolls (IOI18_highway) | C++14 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#include<tolls.h>
/*int64_t ask(vector<int> w){
cout << "ask ";
for(auto e: w){
cout << e << " ";
}
cout<< "\n" << flush;
int resp;
cin >> resp;
return resp;
}
void answer(int s, int t){
cout << "answer: " << s << " " << t << "\n";
}*/
void dfs(int v, int d, vector<vector<int> >& adi, vector<vector<int> >& con, vector<pair<int,int> >& p, vector<int>& c, int dist){
if(d==dist){
c.push_back(v);
}
//cout << v << " " << d << " " << p[v].first << " " << p[v].second << "\n";
for(int i=0; i<(int)adi[v].size(); i++){
int u=adi[v][i];
int ind=con[v][i];
if(u!=p[v].first){
p[u]={v, ind};
dfs(u, d+1, adi, con, p, c, dist);
}
}
}
void find_pair(int n, vector<int> u, vector<int> v, int a, int b){
int m=u.size();
vector<vector<int> > adi(n, vector<int>(0));
vector<vector<int> > con(n, vector<int>(0));
for(int i=0; i<m; i++){
//cout << i << ": " << u[i] << " " << v[i] << "\n";
adi[u[i]].push_back(v[i]);
adi[v[i]].push_back(u[i]);
con[u[i]].push_back(i);
con[v[i]].push_back(i);
}
/*for(auto x: adi){
for(auto e: x){
cout << e << " ";
}
cout << "\n";
}*/
vector<int> w(m, 0);
int64_t dist=ask(w)/a;
vector<int> canditate;
vector<pair<int,int> > p(n, {-1, -1});
dfs(0, 0, adi, con, p, canditate, dist);
int l=0; int r=canditate.size()-1;
int ans=0;
while(l<=r){
int m=l+(r-l)/2;
w.assign(n, 0);
for(int i=0; i<=m; i++){
int c=canditate[i];
w[p[c].second]=1;
}
int resp=ask(w);
if(resp!=dist){
ans=m;
r=m-1;
}
else{
l=m+1;
}
}
answer(0, canditate[ans]);
}
/*signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
int n, m, a, b;
cin >> n >> m>> a >> b;
vector<int> u(m);
vector<int> v(m);
for(int i=0; i<m; i++){
cin >> u[i] >> v[i];
}
find_pair(n, u, v, a, b);
}*/