제출 #1253700

#제출 시각아이디문제언어결과실행 시간메모리
1253700farica공장들 (JOI14_factories)C++20
컴파일 에러
0 ms0 KiB
#include "factories.h"
#include<bits/stdc++.h>
using namespace std;
using vi = vector<int>;
using pi = pair<int,int>;

vector<vector<pi>>ancestors, adjL;
vi sz;
vector<bool>is_removed;
int N2;

int get_sz(int pos, int prev = -1) {
    sz[pos] = 1;
    for(pi adj: adjL[pos]) {
        if(adj.first == prev or is_removed[adj.first]) continue;
        sz[pos] += get_sz(adj.first, pos);
    }
    return sz[pos];
}

int get_centroid(int pos, int n, int prev = -1) {
    for(pi adj: adjL[pos]) {
        if(adj.first == prev or is_removed[adj.first]) continue;
        if(sz[adj.first]*2 > n) return get_centroid(adj.first, n, pos);
    }
    return pos;
}

void get_dists(int pos, int centroid, int prev, int cur_dist) {
    for(pi adj: adjL[pos]) {
        if(adj.first == prev or is_removed[adj.first]) continue;
        get_dists(adj.first, centroid, pos, cur_dist + adj.second);
    }
    ancestors[pos].push_back({centroid, cur_dist});
}

void build(int pos = 0) {
    int centroid = get_centroid(pos, get_sz(pos));
    for(pi adj: adjL[centroid]) {
        if(is_removed[adj.first]) continue;
        get_dists(adj.first, centroid, centroid, adj.second);
    }
    is_removed[centroid] = 1;
    for(pi adj: adjL[centroid]) {
        if(is_removed[adj.first]) continue;
        build(adj.first);
    }
}

void Init(int N, int A[], int B[], int D[]) {
    N2 = N;
    adjL.assign(N, vector<pi>());
    ancestors.assign(N, vector<pi>());
    sz.assign(N, 0);
    for(int i=0; i<N-1; ++i) {
        adjL[A[i]].push_back({B[i], D[i]});
        adjL[B[i]].push_back({A[i], D[i]});
    }
    build();
}

const ll MXVAL = 1e18;

long long Query(int S, int X[], int T, int Y[]) {
    vector<ll> min_dist(N2, MXVAL);
    for(int i=0; i<S; ++i) {
        for(auto &[ancestor, dist]: ancestors[X[i]]) {
            min_dist[ancestor] = min(min_dist[ancestor], dist);
        }
    }
    ll ans = 0;
    for(int i=0; i<T; ++i) {
        ll cnt = MXVAL;
        for(auto &[ancestor, dist]: ancestors[Y[i]]) {
            if(min_dist[ancestor] == MXVAL) continue;
            cnt = min(cnt, dist + min_dist[ancestor]);
        }
        ans += cnt;
    }
    return ans;
}

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

factories.cpp:62:7: error: 'll' does not name a type
   62 | const ll MXVAL = 1e18;
      |       ^~
factories.cpp: In function 'long long int Query(int, int*, int, int*)':
factories.cpp:65:12: error: 'll' was not declared in this scope
   65 |     vector<ll> min_dist(N2, MXVAL);
      |            ^~
factories.cpp:65:14: error: template argument 1 is invalid
   65 |     vector<ll> min_dist(N2, MXVAL);
      |              ^
factories.cpp:65:14: error: template argument 2 is invalid
factories.cpp:65:29: error: 'MXVAL' was not declared in this scope
   65 |     vector<ll> min_dist(N2, MXVAL);
      |                             ^~~~~
factories.cpp:65:34: error: expression list treated as compound expression in initializer [-fpermissive]
   65 |     vector<ll> min_dist(N2, MXVAL);
      |                                  ^
factories.cpp:68:21: error: invalid types 'int[std::tuple_element<0, std::pair<int, int> >::type {aka int}]' for array subscript
   68 |             min_dist[ancestor] = min(min_dist[ancestor], dist);
      |                     ^
factories.cpp:68:46: error: invalid types 'int[std::tuple_element<0, std::pair<int, int> >::type {aka int}]' for array subscript
   68 |             min_dist[ancestor] = min(min_dist[ancestor], dist);
      |                                              ^
factories.cpp:71:7: error: expected ';' before 'ans'
   71 |     ll ans = 0;
      |       ^~~~
      |       ;
factories.cpp:73:11: error: expected ';' before 'cnt'
   73 |         ll cnt = MXVAL;
      |           ^~~~
      |           ;
factories.cpp:75:24: error: invalid types 'int[std::tuple_element<0, std::pair<int, int> >::type {aka int}]' for array subscript
   75 |             if(min_dist[ancestor] == MXVAL) continue;
      |                        ^
factories.cpp:76:13: error: 'cnt' was not declared in this scope; did you mean 'int'?
   76 |             cnt = min(cnt, dist + min_dist[ancestor]);
      |             ^~~
      |             int
factories.cpp:76:43: error: invalid types 'int[std::tuple_element<0, std::pair<int, int> >::type {aka int}]' for array subscript
   76 |             cnt = min(cnt, dist + min_dist[ancestor]);
      |                                           ^
factories.cpp:78:9: error: 'ans' was not declared in this scope; did you mean 'abs'?
   78 |         ans += cnt;
      |         ^~~
      |         abs
factories.cpp:78:16: error: 'cnt' was not declared in this scope; did you mean 'int'?
   78 |         ans += cnt;
      |                ^~~
      |                int
factories.cpp:80:12: error: 'ans' was not declared in this scope; did you mean 'abs'?
   80 |     return ans;
      |            ^~~
      |            abs