제출 #1344516

#제출 시각아이디문제언어결과실행 시간메모리
1344516yhx3Race (IOI11_race)C++20
컴파일 에러
0 ms0 KiB
#include "race.h"
#include <bits/stdc++.h>
using namespace std;
 
// #define int long long
#define ll long long
#define mkp(a,b) make_pair(a,b)
#define rep(i,a,b) for (int i = a; i < b; i++)
#define rrep(i,a,b) for (int i = a; i >= b; i--)
 
array<int,3> mods = {1000000007,998244353,676767677};
int MD = mods[2];
ll MX_ll = 1e18;
int MX_VL = 2e9;
int GN = 1e5+10;
 

vector<map<int,int>> sums;
int res = MX_VL;
vector<int> smdist;
vector<int> dist;
void dfs(vector<vector<pair<int,int>>>& TREE,int ind,int par,int& k) {
    sums[ind][smdist[ind]] = dist[ind];
    for(auto [child,len]:TREE[ind]) {
        if(child==par)continue;
        dfs(TREE,child,ind,k);
        if(sums[child].size() > sums[ind].size()) {
            swap(sums[child],sums[ind]);
            sums[ind][smdist[ind]] = dist[ind];
        }
        for(auto [sum,price]:sums[child]) {
            int targ = k+2*smdist[ind]-sum;
            if(sums[ind].find(targ)!=sums[ind].end()) {
                int cost = price+sums[ind][targ]-2*dist[ind];
                res = min(res,cost);
            }
            if(sums[ind].find(sum)!=sums[ind].end()) {
                sums[ind][sum] = min(sums[ind][sum],price);
            } else {
                sums[ind][sum] = price;
            }
        }
    }
}

void dfs1(vector<vector<pair<int,int>>>& TREE,int ind,int par,int h,int k) {
    dist[ind] = k;
    smdist[ind] = h;
    for(auto [ch,x]:TREE[ind]) {
      if(ch==par)continue;
        dfs1(TREE,ch,ind,h+x,k+1);
    }
}

int best_path(int n,int K,int edges[][2],int L[]) {
    vector<vector<pair<int,int>>> TREE(n,vector<pair<int,int>>());
    sums.resize(n);
    smdist.resize(n);
    dist.resize(n);
    rep(i,0,n-1) {
        TREE[edges[i][0]].push_back(mkp(edges[i][1],L[i]));
        TREE[edges[i][1]].push_back(mkp(edges[i][0],L[i]));
    }
    dfs1(TREE,0,-1,0,0);
    dfs(TREE,0,-1,K);
    if(res==MX_ll) return -1;
    return res;
}

int H[200000][2];
int L[200000];

signed main()
{
  int N,K;
  cin>>N>>K;
  int ans;
  rep(i,0,N-1) {
    cin>>H[i][0]>>H[i][1];
  }
  rep(i,0,N-1) cin>>L[i];
  ans = best_path(N,K,H,L);
  cout<<ans<<endl;
}

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

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