Submission #1018313

#TimeUsernameProblemLanguageResultExecution timeMemory
1018313vjudge1Highway Tolls (IOI18_highway)C++17
0 / 100
204 ms262144 KiB
#include "highway.h"
#include<bits/stdc++.h>
#define pb push_back
#define deb(x) cout<<#x<<": "<<x<<endl;
using namespace std;
using lli=long long;
void dfs(int x, int p, vector<int> &level, vector<vector<int>> &adj){
  for(int y: adj[x]){
    if(y==p) continue;
    level[y]=level[x]+1;
    dfs(y,x,level,adj);
  }
}

void find_pair(int N, vector<int> U, vector<int> V, int A, int B) {
  vector<int> level (N);
  level[0]=0;
  vector<vector<int>> adj (N);
  for(int i=0; i<N-1; ++i){
    adj[U[i]].pb(V[i]);
    adj[V[i]].pb(U[i]);
  }
  dfs(0,-1,level,adj);

  vector<vector<int>> arle(N);
  for(int i=0; i<N-1; ++i){
    
    int x=max(level[U[i]], level[V[i]]);

    arle[x].pb(i);

  }
  vector<int> aux (N-1,0);

  lli v=ask(aux);
  lli d=v/A;
//  deb(d);
  vector<lli> val;
  vector<lli> arista;
  for(lli x: arle[d]){
    arista.pb(x);
    if(level[U[x]]==d){
      val.pb(U[x]);
    }    
    else{
      val.pb(V[x]);
    }
  //  deb(val[val.size()-1]);
  }
  lli l=0;
  lli r=val.size();
  while(r-l>1){
    lli m=(r+l)/2;
    vector<int> aux (N-1,0);
    for(lli i=0; i<=m; ++i){
      aux[arista[i]]=1;
    }
    v=ask(aux);
    if(v==d*A){
      l=m+1;
    }
    else{
      r=m;
    }
  }
  answer(0, val[l]);
}
#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...