Submission #1286718

#TimeUsernameProblemLanguageResultExecution timeMemory
1286718ian_otoniRace (IOI11_race)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>

using namespace std;

vector<vector<pair<int, int>>> adj;
vector<int> sum_root_to_i;
vector<int> distance_root_to_i;
int ans = 999999;

void pre_process(int node, int father, int sum, int distance){
    sum_root_to_i[node] = sum;
    distance_root_to_i[node] = distance;

    for(auto p : adj[node]){
        if(p.first!=father) pre_process(p.first, node, sum+p.second, distance+1);
    }
}

map<int, int> solve(int node, int p, int k){
    //k = sum_root_to_i[a] + sum_root_to_i[b] - 2*sum_root_to_i[u]
    //sum_root_to_i[b] = k - sum_root_to_i[a] + 2*sum_root_to_i[u]
    map<int, int> map_n; //soma, distancia

    for(const auto &[son, other] : adj[node]){
        if(son!=p){
            map<int, int> map_s = solve(son, node, k);
            if(map_s.find(k+sum_root_to_i[node])!=map_s.end())
                ans = min(ans, map_s[k+sum_root_to_i[node]]-distance_root_to_i[node]);
            
            if(map_s.size()>=map_n.size()) swap(map_n, map_s);

            for(const auto &[sum, dist] : map_s){
                int target = k - sum + 2*sum_root_to_i[node];
                if(map_n.find(target)!=map_n.end()) ans = min(ans, dist+map_n[target]-2*distance_root_to_i[node]);
            }

            for(const auto &[sum, dist] : map_s){
                if(map_n.find(sum)==map_n.end()) map_n[sum] = dist;
                else map_n[sum] = min(map_n[sum], dist);
            }
        }
    }

    if(map_n.find(sum_root_to_i[node])!=map_n.end()) map_n[sum_root_to_i[node]] = min(map_n[sum_root_to_i[node]], distance_root_to_i[node]);
    else map_n[sum_root_to_i[node]] = distance_root_to_i[node];
    return map_n;
}


int best_path(int N, int K, int H[][2], int L[]){
    ans = 999999;
    adj.assign(N, vector<pair<int, int>>());
    sum_root_to_i.assign(N, 0);
    distance_root_to_i.assign(N, 0);

    for(int i=0; i<N-1; i++){
        int u = H[i][0];
        int v = H[i][1];
        int w = L[i];

        adj[u].push_back({v, w});
        adj[v].push_back({u, w});
    }

    pre_process(0, -1, 0, 0);
    solve(0, -1, K);
    if(ans==999999) return -1;
    return ans;
}

int main(){
    
}

Compilation message (stderr)

/usr/bin/ld: /tmp/ccP2mygL.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/cch0rAO8.o:race.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status