Submission #946663

#TimeUsernameProblemLanguageResultExecution timeMemory
946663PagodePaivaHighway Tolls (IOI18_highway)C++17
12 / 100
202 ms31788 KiB
#include "highway.h"
#include<bits/stdc++.h>
#define N 90010
#define ll long long

using namespace std;

vector <int> g[N];
int dist[N];
int pai[N];
map <pair <int, int>, int> m;
vector <int> distantes[N];
// int pai[N];

void dfs(int v, int p){
  distantes[dist[v]].push_back(v);
  pai[v] = p;
  for(auto x : g[v]){
    if(x == p) continue;
    dist[x] = dist[v] + 1;
    dfs(x,v);
  }
}

void find_pair(int n, std::vector<int> u, std::vector<int> v, int an, int bn) {
  ll a = an;
  ll b = bn;
  for(int i = 0;i < n-1;i++){
    g[u[i]].push_back(v[i]);
    g[v[i]].push_back(u[i]);
    m[{u[i], v[i]}] = i;
    m[{v[i], u[i]}] = i;
  }
  dfs(0, 0);
  int t = u.size();
  vector <int> w(t);
  for(int i = 0;i < t;i++){
    w[i] = 0;
  } 
  ll preco = ask(w);
  ll D = preco/a;
  int l = 0, r = (int) (distantes[D].size())-1;
  while(l < r){
    int mid = (l+r)/2;
    for(int i = l;i <= mid;i++) w[m[{distantes[D][i], pai[distantes[D][i]]}]] = 1;
    preco = ask(w);
    if(preco == D*a){
      l = mid+1;
    }
    else{
      r = mid;
    }
    for(int i = 0;i < n-1;i++) w[i] = 0;
  }
  answer(0, distantes[D][l]);
  return;
  // int M = U.size();
  // for (int j = 0; j < 50; ++j) {
  //   std::vector<int> w(M);
  //   for (int i = 0; i < M; ++i) {
  //     w[i] = 0;
  //   }
  //   long long toll = ask(w);
  // }
  // answer(0, N - 1);
}

Compilation message (stderr)

highway.cpp: In function 'void find_pair(int, std::vector<int>, std::vector<int>, int, int)':
highway.cpp:27:6: warning: unused variable 'b' [-Wunused-variable]
   27 |   ll b = bn;
      |      ^
#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...