제출 #1283120

#제출 시각아이디문제언어결과실행 시간메모리
1283120diep38경주 (Race) (IOI11_race)C++17
컴파일 에러
0 ms0 KiB

#include <bits/stdc++.h>
using namespace std;

static const int INF = 1e9;

static int N_, K_;
static vector<vector<pair<int,int>>> g;
static vector<int> sz;
static vector<char> dead;
static int answer;

static void dfs_size(int u, int p){
    sz[u] = 1;
    for (auto [v, w] : g[u]) if (v != p && !dead[v]){
        dfs_size(v, u);
        sz[u] += sz[v];
    }
}
static int find_centroid(int u, int p, int tot){
    for (auto [v, w] : g[u]) if (v != p && !dead[v]){
        if (sz[v] * 2 > tot) return find_centroid(v, u, tot);
    }
    return u;
}

static void collect(int u, int p, int dist, int edges, vector<pair<int,int>>& vec){
    if (dist > K_) return;
    vec.emplace_back(dist, edges);
    for (auto [v, w] : g[u]) if (v != p && !dead[v]){
        collect(v, u, dist + w, edges + 1, vec);
    }
}

static void solve_centroid(int c){
    vector<int> best(K_ + 1, INF);
    best[0] = 0;                

    for (auto [v, w] : g[c]) if (!dead[v]){
        vector<pair<int,int>> buf;
        collect(v, c, w, 1, buf);

        for (auto [d, e] : buf){
            if (d <= K_){
                int need = K_ - d;
                if (best[need] != INF) answer = min(answer, e + best[need]);
            }
        }
        for (auto [d, e] : buf){
            if (d <= K_) best[d] = min(best[d], e);
        }
    }
}

static void decompose(int entry){
    dfs_size(entry, -1);
    int c = find_centroid(entry, -1, sz[entry]);
    dead[c] = 1;

    solve_centroid(c);

    for (auto [v, w] : g[c]) if (!dead[v]){
        decompose(v);
    }
}

int best_path(int N, int K, int H[][2], int L[]){
    N_ = N; K_ = K;
    if (K_ == 0) return 0;

    g.assign(N_, {});
    sz.assign(N_, 0);
    dead.assign(N_, 0);
    answer = INF;

    for (int i = 0; i < N_ - 1; ++i){
        int u = H[i][0], v = H[i][1], w = L[i];
        g[u].push_back({v, w});
        g[v].push_back({u, w});
    }
    decompose(0);
    return (answer == INF ? -1 : answer);
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N, K; 
    if (!(cin >> N >> K)) return 0;
    vector<array<int,2>> H(N - 1);
    vector<int> L(N - 1);
    for (int i = 0; i < N - 1; ++i){
        int u, v, w; 
        cin >> u >> v >> w;     
        H[i] = {u, v};
        L[i] = w;
    }

    static int HH[200000 + 5][2];
    static int LL[200000 + 5];
    for (int i = 0; i < N - 1; ++i){
        HH[i][0] = H[i][0];
        HH[i][1] = H[i][1];
        LL[i]    = L[i];
    }

    cout << best_path(N, K, HH, LL) << '\n';
    return 0;
}

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

/usr/bin/ld: /tmp/ccfgjweH.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccoFgzfR.o:race.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status