Submission #672006

#TimeUsernameProblemLanguageResultExecution timeMemory
672006vjudge1Race (IOI11_race)C++17
Compilation error
0 ms0 KiB
#include "race.h"
#include <bits/stdc++.h>

#define el '\n'

typedef long long ll;
typedef long double ld;

using namespace std;

const int INF = 1e9;

struct Centroid {
    vector<bool> vis;
    map<ll, int> paths;
    vector<int> sz, par;
    vector<pair<ll, int>> dis;
    vector<vector<pair<int, int>>> g;

    Centroid(const vector<vector<pair<int, int>>> &g) : g(g) {
        sz.resize(g.size());
        vis.resize(g.size());
        par.resize(g.size());
    }

    int dfsSz(int u, int p) {
        sz[u] = 1;

        for (auto v: g[u]) {
            if (v.first == p || vis[v.first])
                continue;

            sz[u] += dfsSz(v.first, u);
        }

        return sz[u];
    }

    int dfsCentroid(int u, int p, int n) {
        for (auto v: g[u]) {
            if (v.first == p || vis[v.first])
                continue;

            if (sz[v.first] > n / 2)
                return dfsCentroid(v.first, u, n);
        }

        return u;
    }

    void dfs(int u, int p, int cur, ll curDis) {
        dis.emplace_back(curDis, cur);

        for (auto v: g[u]) {
            if (v.first == p || vis[v.first])
                continue;

            dfs(v.first, u, cur + 1, curDis + v.second);
        }
    }

    int build(int u, int p, int &k) {
        int centroid = dfsCentroid(u, p, dfsSz(u, p));

        if (p == -1)
            p = centroid;

        par[centroid] = p;

        vis[centroid] = 1;

        int ret = INF;

        for (auto v: g[centroid]) {
            if (vis[v.first])
                continue;

            dis.clear();

            dfs(v.first, centroid, 1, v.second);

            for (auto i: dis) {
                if (paths[k - i.first])
                    ret = min(ret, i.second + paths[k - i.first]);
            }

            for (auto i: dis) {
                if (!paths[i.first])
                    paths[i.first] = i.second;

                paths[i.first] = min(paths[i.first], i.second);
            }
        }

        paths.clear();

        for (auto v: g[centroid]) {
            if (vis[v.first])
                continue;

            ret = min(ret, build(v.first, centroid, k));
        }

        return ret;
    }
};

int best_path(int N, int K, int H[][2], int L[])
{
    vector<pair<int, int>> g(N + 1);
    for (int i = 0; i < N - 1; i++) {
        g[H[i][0]].emplace_back(H[i][1], L[i]);
        g[H[i][1]].emplace_back(H[i][0], L[i]);
    }

    Centroid c(g);

    int sol = c.build(1, -1, K);

    return (sol == 1e9 ? -1 : sol);
}

Compilation message (stderr)

race.cpp: In function 'int best_path(int, int, int (*)[2], int*)':
race.cpp:112:20: error: '__gnu_cxx::__alloc_traits<std::allocator<std::pair<int, int> >, std::pair<int, int> >::value_type' {aka 'struct std::pair<int, int>'} has no member named 'emplace_back'
  112 |         g[H[i][0]].emplace_back(H[i][1], L[i]);
      |                    ^~~~~~~~~~~~
race.cpp:113:20: error: '__gnu_cxx::__alloc_traits<std::allocator<std::pair<int, int> >, std::pair<int, int> >::value_type' {aka 'struct std::pair<int, int>'} has no member named 'emplace_back'
  113 |         g[H[i][1]].emplace_back(H[i][0], L[i]);
      |                    ^~~~~~~~~~~~
race.cpp:116:17: error: no matching function for call to 'Centroid::Centroid(std::vector<std::pair<int, int> >&)'
  116 |     Centroid c(g);
      |                 ^
race.cpp:20:5: note: candidate: 'Centroid::Centroid(const std::vector<std::vector<std::pair<int, int> > >&)'
   20 |     Centroid(const vector<vector<pair<int, int>>> &g) : g(g) {
      |     ^~~~~~~~
race.cpp:20:52: note:   no known conversion for argument 1 from 'std::vector<std::pair<int, int> >' to 'const std::vector<std::vector<std::pair<int, int> > >&'
   20 |     Centroid(const vector<vector<pair<int, int>>> &g) : g(g) {
      |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
race.cpp:13:8: note: candidate: 'Centroid::Centroid(const Centroid&)'
   13 | struct Centroid {
      |        ^~~~~~~~
race.cpp:13:8: note:   no known conversion for argument 1 from 'std::vector<std::pair<int, int> >' to 'const Centroid&'
race.cpp:13:8: note: candidate: 'Centroid::Centroid(Centroid&&)'
race.cpp:13:8: note:   no known conversion for argument 1 from 'std::vector<std::pair<int, int> >' to 'Centroid&&'