Submission #1253701

#TimeUsernameProblemLanguageResultExecution timeMemory
1253701faricaFactories (JOI14_factories)C++20
Compilation error
0 ms0 KiB
#include "factories.h" #include<bits/stdc++.h> using namespace std; using vi = vector<int>; using pi = pair<int,int>; using ll = long long; 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; }

Compilation message (stderr)

factories.cpp: In function 'long long int Query(int, int*, int, int*)':
factories.cpp:69:37: error: no matching function for call to 'min(__gnu_cxx::__alloc_traits<std::allocator<long long int>, long long int>::value_type&, std::tuple_element<1, std::pair<int, int> >::type&)'
   69 |             min_dist[ancestor] = min(min_dist[ancestor], dist);
      |                                  ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/bits/specfun.h:45,
                 from /usr/include/c++/11/cmath:1935,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:41,
                 from factories.cpp:2:
/usr/include/c++/11/bits/stl_algobase.h:230:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::min(const _Tp&, const _Tp&)'
  230 |     min(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/11/bits/stl_algobase.h:230:5: note:   template argument deduction/substitution failed:
factories.cpp:69:37: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'std::tuple_element<1, std::pair<int, int> >::type' {aka 'int'})
   69 |             min_dist[ancestor] = min(min_dist[ancestor], dist);
      |                                  ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/bits/specfun.h:45,
                 from /usr/include/c++/11/cmath:1935,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:41,
                 from factories.cpp:2:
/usr/include/c++/11/bits/stl_algobase.h:278:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::min(const _Tp&, const _Tp&, _Compare)'
  278 |     min(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/11/bits/stl_algobase.h:278:5: note:   template argument deduction/substitution failed:
factories.cpp:69:37: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'std::tuple_element<1, std::pair<int, int> >::type' {aka 'int'})
   69 |             min_dist[ancestor] = min(min_dist[ancestor], dist);
      |                                  ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/string:52,
                 from /usr/include/c++/11/bits/locale_classes.h:40,
                 from /usr/include/c++/11/bits/ios_base.h:41,
                 from /usr/include/c++/11/ios:42,
                 from /usr/include/c++/11/istream:38,
                 from /usr/include/c++/11/sstream:38,
                 from /usr/include/c++/11/complex:45,
                 from /usr/include/c++/11/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:54,
                 from factories.cpp:2:
/usr/include/c++/11/bits/stl_algo.h:3449:5: note: candidate: 'template<class _Tp> constexpr _Tp std::min(std::initializer_list<_Tp>)'
 3449 |     min(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/11/bits/stl_algo.h:3449:5: note:   template argument deduction/substitution failed:
factories.cpp:69:37: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
   69 |             min_dist[ancestor] = min(min_dist[ancestor], dist);
      |                                  ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/string:52,
                 from /usr/include/c++/11/bits/locale_classes.h:40,
                 from /usr/include/c++/11/bits/ios_base.h:41,
                 from /usr/include/c++/11/ios:42,
                 from /usr/include/c++/11/istream:38,
                 from /usr/include/c++/11/sstream:38,
                 from /usr/include/c++/11/complex:45,
                 from /usr/include/c++/11/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:54,
                 from factories.cpp:2:
/usr/include/c++/11/bits/stl_algo.h:3455:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::min(std::initializer_list<_Tp>, _Compare)'
 3455 |     min(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/11/bits/stl_algo.h:3455:5: note:   template argument deduction/substitution failed:
factories.cpp:69:37: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
   69 |             min_dist[ancestor] = min(min_dist[ancestor], dist);
      |                                  ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~