Submission #1281071

#TimeUsernameProblemLanguageResultExecution timeMemory
1281071dora_kyuRace (IOI11_race)C++17
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n, k;
#define st first
#define nd second
const int maxn = 2e5 +5;
const int inf = 1e9 + 5;
vector<pair<int,int>> a[maxn];
int sl[maxn];
int del[maxn];
#define room(v, x) for(auto &v : x)

void dfs(int u, int p)
{
    sl[u] = 1;
    room(v, a[u])
    {
        if(v.st == p || del[v.st]) continue;
        dfs(v.st, u);
        sl[u] += sl[v.st];
    }
}

int decom(int u, int p, int sz)
{
    room(v, a[u])
    {
        if(v.st == p || del[v.st]) continue;
        if(sl[u] > sz / 2) return decom(v.st, u, sz);
    }
    return u;
}

int ans = inf;

int nmax = 0;

int cnt[maxn * 10];
bool f[maxn * 10];
vector<int> fix;

void dfses(int u, int p, int len, int road, bool al)
{
    if(road > k) return;
    //if(cnt[road] == 0 && road != 0) cnt[road] = inf;
    //if(cnt[k-road] == 0 && k != road) cnt[k-road] = inf;
    if(!f[road]){f[road] = true; fix.push_back(road); }
    nmax = max(nmax, road);
    if(al) cnt[road] = min(cnt[road], len);
    else ans = min(ans , len + cnt[k-road]);

    room(v, a[u])
    {
        if(v.st == p || del[v.st]) continue;
        dfses(v.st , u, len + 1, road + v.nd, al);
    }

}

void update(int u)
{
    nmax = 0;
    cnt[0] = 0;
    room(v, a[u])
    {
        if(del[v.st]) continue;
        dfses(v.st, u, 1, v.nd, false);
        dfses(v.st ,u, 1, v.nd, true);
    }

    while(!fix.empty())
    {
        f[fix.back()] = false;
        cnt[fix.back()] = inf;
        fix.pop_back();
    }
}

void tak(int u)
{
    dfs(u,u);
    int rot = decom(u,u,sl[u]);

    update(rot);

    del[rot] = 1;

    for(auto & v : a[rot])
    {
        if(del[v.st]) continue;
        tak(v.st);
    }

}

signed main()
{
    cin.tie(nullptr) -> ios_base::sync_with_stdio(0);

    cin >> n >> k;

   // fill(cnt + 1, cnt + 10 * maxn, inf);

   // cerr << cnt[2] << endl;

   fill(cnt, cnt + maxn * 10, inf);

  // cerr << cnt[2] << endl;

    for(int i = 1; i < n; ++i)
    {
        int u, v, l; cin >> u >> v >> l;
        a[u].push_back({v,l});
        a[v].push_back({u,l});
    }



    tak(1);
    if(ans == inf) ans = -1;
    cout << ans << endl;
}

Compilation message (stderr)

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