제출 #1147941

#제출 시각아이디문제언어결과실행 시간메모리
1147941Kodik경주 (Race) (IOI11_race)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;
#define ss second
#define ff first
typedef long long ll;
#define int ll
using pi = array<ll, 2>;
const int MOD = 1e9+7;

int n, k;
const int maxn = 2e5;
vector<pair<int,int>> g[maxn];
int sz[maxn];
pi node[maxn];
map<int,int> len_to_dep[maxn];

void dfs_sz(int v, int p, int d, int l){
    sz[v] = 1;
    node[v] = {l, d};
    for(auto &[w,u] : g[v]){
        if(u!=p){
            dfs_sz(u, v, d+1, l+w);
            sz[v] += sz[u];
        }
    }
}

int ans = 1e9;


void dfs(int v, int p){
    int mx = -1, bigChild = -1;
    for(auto& [w, u] : g[v]){
        if(u!=p&&sz[u]>mx){
            mx = sz[u];
            bigChild = u;
        }
        if(u!=p){
            dfs(u, v);
        }
    }
    if(bigChild!=-1){
        swap(len_to_dep[v], len_to_dep[bigChild]);
    }
    if(len_to_dep[v].count(node[v][0])>0) len_to_dep[v][node[v][0]] = min(len_to_dep[v][node[v][0]], node[v][1]);
    else len_to_dep[v][node[v][0]] = node[v][1];
    for(auto &[w, u] : g[v]){
        if(u!=p&&u!=bigChild){
            for(auto &[l, d] : len_to_dep[u]){
                int seek = k-l+node[v][0];
                if(len_to_dep[v].count(seek)>0){
                    ans = min(ans, d+len_to_dep[v][seek]-2*node[v][1]);
                }
            }
            for(auto &[l, d] : len_to_dep[u]){
                if(len_to_dep[v].count(l)>0) len_to_dep[v][l] = min(len_to_dep[v][l], d);
                else len_to_dep[v][l] = d;
            }
        }
    }
    if(len_to_dep[v].count(k)>0) ans = min(ans, len_to_dep[v][k]);
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> n >> k;
    vector<pi> h(n-1); 
    for(auto &[a,b] : h) cin >> a >> b;
    for(int i = 0; i < n-1; ++i){
        int x; cin >> x;
        g[h[i][0]].push_back({x, h[i][1]});
        g[h[i][1]].push_back({x, h[i][0]});
    }
    dfs_sz(0,-1,0,0);
    dfs(0,-1);
    if(ans==1e9) ans = -1;
    cout << ans << '\n';
    return 0;
}

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

/usr/bin/ld: /tmp/cczT1FSW.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccViCU2t.o:race.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/cczT1FSW.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