제출 #1245154

#제출 시각아이디문제언어결과실행 시간메모리
1245154vux2codeRace (IOI11_race)C++20
컴파일 에러
0 ms0 KiB
// The capital, vodka, the Soviet bear!
#include "race.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
#define fi first
#define se second
void maxi (ll &x, ll y) {x = max (x, y);}
void mini (ll &x, ll y) {x = min (x, y);}

const ll maxN = 2e5 + 5, inf64 = 1e18, maxA = 1e6 + 5;

ll n, k, sz [maxN], f [maxA], ans;
bool del [maxN];
vector <ll> vec;
vector <pll> adj [maxN];

ll dfs (ll x, ll par) {
    sz [x] = 1;
    for (pll i : adj [x]) if (!del [i. fi] && i. fi != par) {
        sz [x] += dfs (i. fi, x);
    }
    return sz [x];
}

ll finCen (ll x, ll par, ll cnt) {
    for (pll i : adj [x]) if (!del [i. fi] && i. fi != par) {
        if (sz [i. fi] * 2 >= cnt) return finCen (i. fi, x, cnt);
    }
    return x;
}

void get (ll x, ll par, ll dis, ll numNode) {
    if (k >= dis) mini (ans, f [k - dis] + numNode);
//    cerr << k - dis << ' ' << f [k - dis] + numNode << '\n';
    for (pll i : adj [x]) if (!del [i. fi] && i. fi != par) {
        get (i. fi, x, dis + i. se, numNode + 1);
    }
}

void update (ll x, ll par, ll dis, ll numNode) {
    mini (f [dis], numNode);
    //cerr << dis << ' ' << numNode << '\n';
    vec. push_back (dis);
    for (pll i : adj [x]) if (!del [i. fi] && i. fi != par) {
        update (i. fi, x, dis + i. se, numNode + 1);
    }
}

void build (ll x) {
    ll cnt = dfs (x, -1);
    ll cen = finCen (x, -1, cnt);
    vec. clear ();
    del [cen] = 1;
    for (pll i : adj [cen]) if (!del [i. fi]) {
        get (i. fi, cen, i. se, 1);
        update (i. fi, cen, i. se, 1);
    }
//    cerr << cen << '\n';
//    for (int i = 0; i < 5; i ++) cerr << f [i] << ' ';
//    cerr << '\n';
    for (ll i : vec) f [i] = inf64;
    for (pll i : adj [cen]) if (!del [i. fi]) build (i. fi);
}

ll best_path (int N, int K, int H [] [2], int L []) {
    n = N; k = K;
//    cerr << n << ' ' << k << '\n';
    for (int i = 0, u, v, w; i < n - 1; i ++) {
        u = H [i] [0];
        v = H [i] [1];
        w = L [i];
        adj [u]. push_back ({v, w});
        adj [v]. push_back ({u, w});
//        cerr << u << ' ' << v << ' ' << w << '\n';
    }
//    for (int i = 0; i < n; i ++) {
//        for (pll j : adj [i]) cerr << "(" << j. fi << ',' << j. se << "),";
//        cerr << '\n';
//    }
    ans = inf64;
    for (ll &i : f) i = inf64;
    f [0] = 0;
    build (0);
    if (ans >= inf64) return -1;
    return ans;
}

// int main () {
//     ios::sync_with_stdio (0);
//     cin. tie (0);
//     cout. tie (0);
//     #define task "untitled1"
//     if (fopen (task".inp", "r")) {
//         freopen (task".inp", "r", stdin);
//         freopen (task".out", "w", stdout);
//     }
//     int N, K;
//     cin >> N >> K;
//     int H [N] [2];
//     int L [N];
//     for (int i = 0; i < N - 1; i ++) cin >> H [i] [0] >> H [i] [1];
//     for (int i = 0; i < N - 1; i ++) cin >> L [i];
// //    cerr << N << ' ' << K << '\n';
// //    for (int i = 0; i < N - 1; i ++) cerr << H [i] [0] << ' ' <<  H [i] [1] << '\n';
// //    for (int i = 0; i < N - 1; i ++) cerr << L [i] << ' ';
//     cout << best_path (N, K, H, L) << '\n';
// }

컴파일 시 표준 에러 (stderr) 메시지

race.cpp:67:4: error: ambiguating new declaration of 'll best_path(int, int, int (*)[2], int*)'
   67 | ll best_path (int N, int K, int H [] [2], int L []) {
      |    ^~~~~~~~~
In file included from race.cpp:2:
race.h:1:5: note: old declaration 'int best_path(int, int, int (*)[2], int*)'
    1 | int best_path(int N, int K, int H[][2], int L[]);
      |     ^~~~~~~~~