Submission #1351168

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

using namespace std;

#define int long long

int c = -1;
vector<vector<pair<int,int>>>ls;
vector<int>vis;
int n;
int k;

int dfs(int v,int par){
    if(c!=-1)return 0;
    if(ls[v].size()==1&&par!=-1){
        return 1;
    }else{
        int cnt = 0;
        bool ify = true;
        for(auto e : ls[v]){
            if(e.first!=par&&vis[e.first] == false){
                int cur = dfs(e.first,v);
                if(cur<=n/2){
                    cnt+=cur;
                }else{
                    ify = false;
                }
            }
        }
        if(ify == false||c!=-1)return cnt+1;
        if(n-1-cnt<=n/2){
            c = v;
        }
        return cnt+1;
    }
    
}

int result = LLONG_MAX;
map<int,int>m_gen= {};
map<int,int>m_cur= {};
map<int,int>n_mgen ={};

void dfs2(int v,int par,int dis,int krw){
    if(dis>k)return;
    if(m_cur[dis]==0){
        m_cur[dis] = krw;
        n_mgen[dis] = krw;
    }else{
        m_cur[dis] = min(m_cur[dis],krw);
        n_mgen[dis] = min(m_cur[dis],krw);
    }
    if(m_gen[k-dis]>0){
        result = min(result,krw+m_gen[k-dis]);
    }
    if(dis == k){
        result = min(result,krw);
    }
    for(auto e : ls[v]){
        if(e.first!=par&&vis[e.first]==false){
            dfs2(e.first,v,dis+e.second,krw+1);
        }
    }
}

int32_t main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>n>>k;

    ls.resize(n);
    vis.resize(n,false);

    for(int i = 0;i<n-1;i++){
        int a,b,c;
        cin>>a>>b>>c;

        ls[a].push_back({b,c});
        ls[b].push_back({a,c});
    }
    queue<int>q;

    dfs(0,-1);
    
    vis[c] = true;

    for(auto e : ls[c]){
        q.push(e.first);
        dfs2(e.first,c,e.second,1);
        m_gen = n_mgen;
        m_cur.clear();
        
    }
    m_gen.clear();
    n_mgen.clear();

    while(!q.empty()){
        auto e = q.front();
        q.pop();
        c = -1;
        dfs(e,-1);
        if(c==-1)break;
        vis[c] = true;
        for(auto e : ls[c]){
            q.push(e.first);
            dfs2(e.first,c,e.second,1);
            m_gen = n_mgen;
            m_cur.clear();
        }
        m_gen.clear();
        n_mgen.clear();
    }
    if(result == LLONG_MAX){
        cout<<-1<<endl;
        return 0;
    }
    cout<<result<<endl;

    return 0;
}

Compilation message (stderr)

/usr/bin/ld: /tmp/cc2bgJEG.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/cc5vnkKs.o:race.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/cc2bgJEG.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