Submission #1314253

#TimeUsernameProblemLanguageResultExecution timeMemory
1314253sfsdafRace (IOI11_race)C++17
Compilation error
0 ms0 KiB
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define FOR(i, a, b) for(int i = (a); i <= (b); i++)
#define FORN(i, a, b) for(int i = (a); i >= (b); i--)
#define all(a) (a).begin(), (a).end()
#define sz(a) (int)(a).size()
#define ull unsigned long long
#define pb push_back
#define fi first
#define se second
#define BIT(mask, i) mask & (1 << i)
#define sp(x) setprecision(x) << fixed
const int maxn = 2e5;
int n, tot, k, ans = INT_MAX;
vector<pair<int, int>> g[maxn + 5];
vector<int> min_edge(maxn + 5, INT_MAX);
vector<int> touched;
int num[maxn + 5], del[maxn + 5];
void calc_num(int u, int p){
    tot++;
    num[u] = 1;
    for(auto [v, w] : g[u]){
        if(v == p || del[v]) continue;
        calc_num(v, u);
        num[u] += num[v];
    }
}

int find_cen(int u, int p){
    for(auto [v, w] : g[u]){
        if(v == p || del[v] || num[v] <= tot / 2) continue;
        return find_cen(v, u);
    }
    return u;
}

void dfs_collect(int u, int p, int wei, int dep, vector<pair<int, int>> &deps){
    deps.pb({wei, dep});
    for(auto [v, w] : g[u]){
        if(v == p || del[v]) continue;
        dfs_collect(v, u, wei + w, dep + 1, deps);
    }
}

void decompose(int u){
    tot = 0;
    calc_num(u, 0);
    int cen = find_cen(u, 0);
    del[cen] = 1;
    for(auto [v, w] : g[cen]){
        if(del[v]) continue;
        vector<pair<int, int>> deps;
        dfs_collect(v, cen, w, 1, deps);

        for(auto [wei, dep] : deps){
            if(wei <= k){
                ans = min(ans, dep + min_edge[k - wei]);
            }
        }

        for(auto [wei, dep] : deps){
            if(wei <= k){
                touched.pb(wei);
                min_edge[wei] = min(min_edge[wei], dep);
            }
        }
    }

    for(auto x : touched) min_edge[x] = INT_MAX;

    for(auto [v, w] : g[cen]){
        if(del[v]) continue;
        decompose(v);
    }
}
void solve(){
    cin >> n >> k;
    FOR(i, 1, n - 1){
        int x, y, w; cin >> x >> y >> w;
        g[x].pb({y, w});
        g[y].pb({x, w});
    }

    decompose(0);

    cout << (ans == INT_MAX ? -1 : ans);
}
signed main(){
    if(fopen("input.txt", "r")) freopen("input.txt", "r", stdin);
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int t = 1;
    //cin >> t;
    while(t--) solve();
    return 0;
}

Compilation message (stderr)

race.cpp: In function 'int main()':
race.cpp:91:40: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   91 |     if(fopen("input.txt", "r")) freopen("input.txt", "r", stdin);
      |                                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
/usr/bin/ld: /tmp/ccUdqfxA.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccH5eCDh.o:race.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccUdqfxA.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