Submission #1363336

#TimeUsernameProblemLanguageResultExecution timeMemory
1363336ddlRace (IOI11_race)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;
#define int int64_t
#define all(v) (v).begin(), (v).end()
#define sz(v) (int)(v).size()
#define PI 3.14159265358979323846264
template<typename T>
using vec = vector<T>;
mt19937_64 rng(chrono::high_resolution_clock::now().time_since_epoch().count());
int n, k;
int tpt = 123123123;
constexpr int N = 2e5;
vec<pair<int, int>> ke[N + 5];
bool removed[N + 5];
int subtree[N + 5];
int getsub(int u, int p) {
    subtree[u] = 1;
    for (auto& fpt : ke[u]) {
        int v = fpt.first;
        int w = fpt.second;
        if (v == p || removed[v]) continue;
        subtree[u] += getsub(v, u);
    }
    return subtree[u];
}
int getCentroid(int u, int p, int total) {
    for (auto& fpt : ke[u]) {
        int v = fpt.first;
        int w = fpt.second;
        if (v == p || removed[v]) continue;
        if (subtree[v] * 2 > total) {
            getCentroid(v, u, total);
        }
    }
    return u;
}
void Dfs(int u, int p, vec<pair<int, int>>& node, int dep, int dist) {
    node.push_back({dep, dist});
    for (auto& fpt : ke[u]) {
        int v = fpt.first;
        int w = fpt.second;
        if (!removed[v] && v != p) {
            Dfs(v, u, node, dep + 1, dist + w);
        }
    }
}
void process(int cen) {
    map<int, int> mp;
    mp[0] = 0;
    for (auto& fpt : ke[cen]) {
        int v = fpt.first;
        int w = fpt.second;
        if (!removed[v]) {
            vec<pair<int, int>> node;
            Dfs(v, cen, node, 1, w);
            for (auto& tft : node) {
                int eg = tft.first;
                int dis = tft.second;
                if (mp.find(k - dis) != mp.end()) {
                    tpt = min(tpt, mp[k - dis] + eg);
                }
            }
            for (auto& tft : node) {
                int dis = tft.second;
                int eg = tft.first;
                mp[dis] = min(mp[dis], eg);
            }
        }
    }
}
void decompose(int u) {
    int total = getsub(u, -1);
    int cen = getCentroid(u, -1, total);
    process(cen);
    removed[cen] = true;
    for (auto& fpt : ke[cen]) {
        int v = fpt.first;
        int w = fpt.second;
        if (removed[v]) continue;
        decompose(v);
    }
}
void solving(int tc) {
    cin >> n >> k;
    vec<pair<int, int>> edge;
    vec<int> len;
    for (int i = 0; i < n - 1; ++i) {
        int u, v;
        cin >> u >> v;
        edge.push_back({u, v});
    }
    for (int i = 0; i < n - 1; ++i) {
        int w;
        cin >> w;
        len.push_back(w);
    }
    for (int i = 0; i < n - 1; ++i) {
        ke[edge[i].first].push_back({edge[i].second, len[i]});
        ke[edge[i].second].push_back({edge[i].first, len[i]});
    }
    decompose(0);
    if (tpt == 123123123) {
        cout << -1 << "\n";
    }
    else {
        cout << tpt << "\n";
    }
}

int32_t main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    if(fopen("TASK.in", "r")){
        freopen("TASK.in", "r", stdin);
        freopen("TASK.out", "w", stdout);
    }
    int testCase = 1;
    while (testCase--) {
        solving(testCase);
    }
    cerr << "\nTime elapsed: " << (1.0 * clock() / CLOCKS_PER_SEC) << ".s\n";
}

Compilation message (stderr)

race.cpp: In function 'int32_t main()':
race.cpp:115:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  115 |         freopen("TASK.in", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
race.cpp:116:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  116 |         freopen("TASK.out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
/usr/bin/ld: /tmp/ccI85Sts.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/cc9Ievd0.o:race.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccI85Sts.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