Submission #1155394

#TimeUsernameProblemLanguageResultExecution timeMemory
1155394andrewpRace (IOI11_race)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>   
using namespace std;
#define ll long long
#define pb push_back
#define pii pair<int,int>
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend() 
const int N=1e6+10, INF=(int)(1e9);   
#define int ll

int n, k, sz[N], ans=INF;
vector<pii> g[N], anc;
map<int, int> dp;
vector<int> vec;
bool removed[N];

int dfs_sz(int x, int par) {
    sz[x]=1;
    for (auto u:g[x]) {
        if (removed[u.first]||u.first==par) 
            continue;
        sz[x]+=dfs_sz(u.first, x); 
    }
    return sz[x]; 
}

int get_cent(int x, int n_, int par) {
    for (auto u:g[x]) {
        if (removed[u.first]||u.first==par) 
            continue;
        if (sz[u.first]*2>n_) 
            return get_cent(u.first, n_, x);
    }
    return x; 
}

void upd(int x, int d1, int d2, int par) {
    anc.pb(make_pair(d2, d1));
    // cout << "upd " << x << ' ' << d1 << ' ' << d2 << ' ' << par << '\n';
    if (k>=d2) 
        ans=min(ans, d1+dp[k-d2]);
    // if (d1+dp[k-d2]==1) {
    //     cout << d1 << ' ' << k-d2 << ' ' << dp[k-d2] << '\n';
    // }
    for (auto u:g[x]) {
        if (removed[u.first]||u.first==par) 
            continue;
        upd(u.first, d1+1, d2+u.second, x); 
    }
}

void build_cent(int x) {
    int cen=get_cent(x, dfs_sz(x, -1), -1); 
    dp[0]=0;
    for (auto u:g[cen]) {   
        if (removed[u.first])
            continue;
        upd(u.first, 1, u.second, cen);
        for (auto v:anc) {
            if (dp[v.first]==INF) 
                vec.pb(v.first);
            dp[v.first]=min(dp[v.first], v.second);
        }
        anc=vector<pii>();
    }
    // cout << "si " << vec.size() << '\n';
    // for (int u:vec) 
    //     cout << "? " << u << ' ' << dp[u] << '\n';
    for (int u:vec) 
        dp[u]=INF; 
    removed[cen]=true;
    vec=vector<int>();
    for (auto u:g[cen]) {
        if (removed[u.first])
            continue;
        build_cent(u.first); 
    }
}

int32_t main () {    
    ios::sync_with_stdio(false), cin.tie(0); 

    cin >> n >> k;
    for (int i=1; i<=k; i++) 
        dp[i]=INF;
    for (int i=1; i<n; i++) {
        int u, v, w;
        cin >> u >> v >> w;
        u++, v++;
        g[u].pb(make_pair(v, w));
        g[v].pb(make_pair(u, w));
    }
    build_cent(1);
    cout << (ans==INF?-1:ans) << '\n';
    return 0;
}          
/*
11 12
0 1 3
0 2 4
2 3 5
3 4 4
4 5 6
0 6 3
6 7 2
6 8 5
8 9 6
8 10 7
2

4 3
0 1 1
1 2 2
1 3 4
2
*/

Compilation message (stderr)

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