제출 #441219

#제출 시각아이디문제언어결과실행 시간메모리
441219julian33경주 (Race) (IOI11_race)C++14
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>

using namespace std;

#ifdef LOCAL
#define deb(...) logger(#__VA_ARGS__, __VA_ARGS__)
template<typename ...Args>
void logger(string vars, Args&&... values) {
    cerr<<vars<<" = ";
    string delim="";
    (...,(cerr<<delim<<values,delim=", "));
    cerr<<"\n";
}
#else
#define deb(...) logger(#__VA_ARGS__, __VA_ARGS__)
template<typename ...Args>
void logger(string vars, Args&&... values) {}
#endif

#define pb push_back
#define sz(x) (int)(x.size())
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
template<typename T> inline void maxa(T& a,T b){a=max(a,b);}
template<typename T> inline void mina(T& a,T b){a=min(a,b);}

const int mxN=2e5+5;

vector<pii> graph[mxN];
int seen[mxN],sub[mxN],ans=1e9,K;
unordered_map<int,int> mp;

void dfs(int at,int p){
    sub[at]=1;
    for(auto &[i,w]:graph[at]){
        if(i==p || seen[i])
            continue;
        dfs(i,at);
        sub[at]+=sub[i];
    }
}

int centroid(int at,int p,int s){
    for(auto &[i,w]:graph[at]){
        if(i==p || seen[i])
            continue;
        if(sub[i]>s/2)
            return centroid(i,at,s);
    }
    return at;
}

void solve(int at,int p,int len,int filling,int h){
    if(len>K)
        return;
    if(filling){
        if(mp.count(len))
            mina(mp[len],h);
        else
            mp[len]=h;
    } else{
        if(mp.count(K-len)){
            mina(ans,mp[K-len]+h);
        }
    }
    for(auto &[i,w]:graph[at]){
        if(i==p || seen[i])
            continue;
        solve(i,at,len+w,filling,h+1);
    }
}

void build(int at){
    dfs(at,-1);
    int s=sub[at];
    int cent=centroid(at,-1,s);
    mp.clear();
    for(auto &[i,w]:graph[cent]){
        solve(i,cent,w,0,1);
        solve(i,cent,w,1,1);
    }
    seen[cent]=1;
    for(auto &[i,w]:graph[cent]){
        if(seen[i])
            continue;
        build(i);
    }
}

int best_path(int n,int k,vector<vector<int>> h,vector<int> l){
    K=k;
    for(int i=0;i<n-1;i++){
        graph[h[0][i]].pb({h[1][i],l[i]});
        graph[h[1][i]].pb({h[0][i],l[i]});
    }
    build(0);
    return (ans==1e9?-1:ans);
}

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

race.cpp: In function 'void dfs(int, int)':
race.cpp:36:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   36 |     for(auto &[i,w]:graph[at]){
      |               ^
race.cpp: In function 'int centroid(int, int, int)':
race.cpp:45:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   45 |     for(auto &[i,w]:graph[at]){
      |               ^
race.cpp: In function 'void solve(int, int, int, int, int)':
race.cpp:67:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   67 |     for(auto &[i,w]:graph[at]){
      |               ^
race.cpp: In function 'void build(int)':
race.cpp:79:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   79 |     for(auto &[i,w]:graph[cent]){
      |               ^
race.cpp:84:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   84 |     for(auto &[i,w]:graph[cent]){
      |               ^
/usr/bin/ld: /tmp/ccnEBgz7.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