Submission #1361354

#TimeUsernameProblemLanguageResultExecution timeMemory
1361354sampaio_kkRace (IOI11_race)C++20
Compilation error
0 ms0 KiB
#include "race.h"
#include <bits/stdc++.h>
#define _ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define int long long
#define fr first
#define sc second
#define all(x) x.begin(), x.end()
#define inv(x) x, vector<x>, greater<x>
#define lsb(x) (x&-x)
#define pb push_back
#define me max_element
#define pq priority_queue
using namespace std;
using pii = pair<int, int>;
using pip = pair<int, pii>;
using ppp = pair<pii, pii>;
const int mod7 = 1000000007, mod9 = 998244353, ln = 23, inf = 1e18, N = 2e5 + 5;
struct ed{
        int w, a;
};
int k, ans = inf;
vector<ed> g[N];
int depth[N], dist[N];
map<int, int> mp[N];
void merge(map<int, int>& a, map<int, int>& b, int v){
        if(a.size() < b.size()) swap(a, b);
        for(auto [x, dp]:b){
                int need = k + 2*dist[v] - x;
                if(a.count(need)){
                        ans = min(ans, dp + a[need] - 2*depth[v]);
                }
        }
        for(auto[x, dp]:b){
                if(a.count(x)){
                        a[x] = min(a[x], dp);
                }
                else{
                        a[x] = dp;
                }
        }
}
void dfs(int v, int p){
        mp[v][dist[v]] = depth[v];
        for(auto [iw, i]:g[v]){
                if(i == p) continue;
                depth[i] = depth[v] + 1;
                dist[i] = dist[v] + iw;
                dfs(i, v);
                merge(mp[v], mp[i], v);
        }
}
int best_path(int N, int K, int H[][2], int L[]){
        k = K;
        for(int i = 0; i < N-1; i++){
                int a = H[i][0], b = H[i][1];
                int w = L[i];
                g[a].pb({w, b});
                g[b].pb({w, a});
        }
        dfs(0, 0);
        
        // for(int i = 0; i < n; i++){
        //         cout << i << ": ";
        //         for(auto [d, dp]:mp[i]){
        //                 cout << d << ' ' << dp << ", ";
        //         }
        //         cout << '\n';
        // }
        // for(auto [d, dp]:mp[0]) cout << d << ' ' << dp << '\n';
        return (ans == inf ? -1:ans);
}
// signed main(){
//         int n, k; cin >> n >> k;
//         int h[n-1][2], l[n-1];
//         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];
//         }
//         cout << best_path(n, k, h, l);
// }

Compilation message (stderr)

/usr/bin/ld: /tmp/ccEYHulB.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