제출 #478693

#제출 시각아이디문제언어결과실행 시간메모리
478693Ronin13경주 (Race) (IOI11_race)C++14
컴파일 에러
0 ms0 KiB
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned ll
#define epb emplace_back
#define pb push_back
#define pii pair<int,int>
#define pll pair<ll,ll>
#define f first
#define s second
#define inf 1e9+1
#define linf 1e18+1
using namespace std;
const int NMAX=1e6+1;
vector<vector<pii> >g(NMAX);
vector<int>d(NMAX,inf);
vector<int>t(NMAX);
vector<int>cmp;
vector<bool>used(NMAX);
void dfs(int v,int e=-1){
    t[v]=1;
    for(pii x:g[v]){
        int to=x.f;
        if(to==e)continue;
        if(used[to])continue;
        dfs(to,v);
        t[v]+=t[to];
    }

}
int n;
int cent(int v,int sz,int e=-1){
    bool isc=true;
    if(sz-t[v]>sz/2)isc=false;
    for(pii x:g[v]){
        int to=x.f;
        if(to==e)continue;
        if(used[to])continue;
        if(t[to]>sz/2)isc=false;
    }
    if(isc)return v;
    for(pii x:g[v]){
        int to=x.f;
        if(to==e)continue;
        if(used[to])continue;
        int an=cent(to,sz,v);
        if(an!=-1)return an;
    }
    return -1;
}
int k;
int mn=inf;
void DFS(int v,int depth,int depthl,int e=-1){
    if(depthl>k)return;
    mn=min(mn,depth+d[k-depthl]);
    for(pii x:g[v]){
        int to=x.f,len=x.s;
        if(to==e)continue;
        if(used[to])continue;
        if(depthl+len>k)continue;
        DFS(to,depth+1,depthl+len,v);
    }
}
void DFS2(int v,int depth,int depthl,int e=-1){
    if(depthl>k)return;
    d[depthl]=min(d[depthl],depth);
    for(pii x:g[v]){
        int to=x.f,len=x.s;
        if(to==e)continue;
        if(used[to])continue;
        if(depthl+len>k)continue;
        DFS2(to,depth+1,depthl+len,v);
    }
}
void clear_dfs(int v,int depth,int depthl,int e=-1){
    if(depthl>k)return;
    //mn=min(mn,depth+d[k-depthl]);
    for(pii x:g[v]){
        int to=x.f,len=x.s;
        if(to==e)continue;
        if(used[to])continue;
        if(depthl+len>k)continue;
        clear_dfs(to,depth+1,depthl+len,v);
        d[depthl+len]=inf;
    }
}

void rec(int v){
    dfs(v);
    int sz=t[v];
    int c=cent(v,sz);
    if(c==-1)return;
    d[0]=0;
    for(pii x:g[c]){
        int to=x.f;
        if(used[to])continue;
        DFS(to,1,x.s,c);
        DFS2(to,1,x.s,c);
    }
    used[c]=true;
    clear_dfs(c,0,0);
    for(pii x:g[c]){
        int to=x.f;
        if(used[to])continue;
        rec(to);
    }
}

void solve(){
    cin>>n;
    cin>>k;
    for(int i=1;i<n;i++){
        int u,v;cin>>u>>v;
        int len;cin>>len;
        g[u].pb({v,len});
        g[v].pb({u,len});
    }
    rec(1);
    if(mn==inf)cout<<-1;
    else
    cout<<mn<<"\n";
}

int main(){
    ios_base::sync_with_stdio(false);cin.tie(0);
    //freopen("in.in","r",stdin);freopen("out.out","w",stdout);
    int test=1;//cin>>test;
    while(test--){
        solve();
    }
}

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

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