제출 #786040

#제출 시각아이디문제언어결과실행 시간메모리
786040vjudge1경주 (Race) (IOI11_race)C++17
컴파일 에러
0 ms0 KiB
#include "bits/stdc++.h"
using namespace std;

#define int long long
#define ii pair<int,int>

const int ms = 1e5 + 5;

int sz[ms], dis[ms];
int n, sum, ans, k;
vector<ii> g[ms];


void put(int u, int p, int d, int qtd=0){
  if(d > k) return;
  dis[d] = min(dis[d], qtd);
  for(auto [v, w] : g[u]){
    if(v == p) continue;
    put(v, u, d+w, qtd+1);
  }
}

void qry(int u, int p, int d, int qtd=0){
  if(d > k) return;
  ans = min(ans, dis[d] + dis[k-d]);
  for(auto [v, w] : g[u]){
    if(v == p) continue;
    qry(v, u, d+w, qtd+1);
  }
}

void clean(int u, int p, int d){
  if(d > k) return;
  dis[d] = n + 100;
  for(auto [v, w] :g[u]){
    if(v == p) continue;
    clean(v, u, d +w);
  }
}


void dfs(int u, int p = -1, bool keep = false){
  int big = -1;
  for(auto [v, w] : g[u]){
    if(v == p) continue;
    if(big == -1 || sz[big] < sz[v]){
      big = v;
    }
  }

  for(auto [v, w] : g[u]){
    if(v == p || v == big) continue;
    dfs(v, u, false);
  }

  if(big != -1) dfs(big, u, true);


  for(auto [v, w] : g[u]){
    if(v == big || v == p) continue;
    qry(v, u, w, 1);
    put(v, u, w, 1);
  }


  if(!keep){
    clean(u, p, 0);
    dis[0] = 0;
  }

}

int getSz(int u=0, int p=-1){
  sz[u] = 1;
  for(auto [v, w] : g[u]){
    if(v == p) continue;
    sz[u] += getSz(v, u);
  }
  return sz[u];
}


int best_path(int N, int K, int H[][2], int L[]){
  k = K;
  n = N;
  for(int i=1; i<n; i++){
    g[H[i][0]].push_back({H[i][1], L[i]});
    g[H[i][1]].push_back({H[i][0], L[i]});
  }

  memset(dis, 0x3f, sizeof dis);
  dis[0] = 0;
  ans = n+ 100;
  getSz();
  dfs(0);

  if(ans > n){
    return -1;
  }
  return ans;
}

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/ccVnpBfO.o: in function `main':
grader.cpp:(.text.startup+0x28): undefined reference to `best_path(int, int, int (*) [2], int*)'
collect2: error: ld returned 1 exit status