제출 #1318057

#제출 시각아이디문제언어결과실행 시간메모리
1318057fatuu27Factories (JOI14_factories)C++20
컴파일 에러
0 ms0 KiB
#include "factories.h" #include <iostream> #include <vector> #include <algorithm> #include <queue> using namespace std; const long long inf = 1'000'000'000'000'000; struct idt { int y; long long dist; bool const operator<(const idt &oth) const { return dist>oth.dist; } }; int n,idx; vector<int> nxt,top,sz,cen,active; vector<idt> G; priority_queue<idt> Q[500005]; vector<vector<pair<int,long long>>> up; void add_edge(int x,int y,int dist) { idx++; G[idx]={y,dist}; nxt[idx]=top[x]; top[x]=idx; } int Size(int x,int tata) { sz[x]=1; for(int i=top[x];i;i=nxt[i]) { int y=G[i].y; if(y==tata || cen[y]) continue; sz[x]+=Size(y,x); } return sz[x]; } int centroid(int x,int size,int tata) { for(int i=top[x];i;i=nxt[i]) { int y=G[i].y; if(y==tata || cen[y]) continue; if(2*sz[y]>size) return centroid(y,size,x); } return x; } void dfs(int x,int c,int tata,long long d) { up[x].emplace_back(c,d); for(int i=top[x];i;i=nxt[i]) { auto [y,dist]=G[i]; if(y==tata || cen[y]) continue; dfs(y,c,x,d+dist); } } void decompose(int x,int tata) { int c=centroid(x,Size(x,tata),tata); for(int i=top[c];i;i=nxt[i]) { auto [y,dist]=G[i]; if(y==c || cen[y]) continue; dfs(y,c,c,dist); } cen[c]=1; for(int i=top[c];i;i=nxt[i]) { int y=G[i].y; if(y==c || cen[y]) continue; decompose(y,c); } } void Init(int N,int A[],int B[],int D[]) { n=N; G=vector<idt>(2*n+1); nxt=vector<int>(2*n+1); top=cen=sz=active=vector<int>(n+1); up=vector<vector<pair<int,int>>>(n+1); for(int i=1;i<=n-1;i++) { add_edge(A[i-1]+1,B[i-1]+1,D[i-1]); add_edge(B[i-1]+1,A[i-1]+1,D[i-1]); } decompose(1,0); } long long dist_to_active(int c) { long long ans=inf; while(!Q[c].empty()) { auto [x,d]=Q[c].top(); if(active[x]) return d; Q[c].pop(); } return ans; } void upd(int x) { Q[x].emplace(x,0); for(auto [c,dist]:up[x]) Q[c].emplace(x,dist); } long long que(int x) { long long ans=inf; for(auto [c,dist]:up[x]) { ans=min(ans,dist+dist_to_active(c)); } return ans; } long long Query(int S,int X[],int T,int Y[]) { long long ans=inf; for(int i=1;i<=S;i++) { upd(X[i-1]+1); active[X[i-1]+1]=1; } for(int i=1;i<=T;i++) { ans=min(ans,que(Y[i-1]+1)); } for(int i=1;i<=S;i++) { active[X[i-1]+1]=0; } return ans; }

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

factories.cpp: In function 'void Init(int, int*, int*, int*)':
factories.cpp:90:41: error: no match for 'operator=' (operand types are 'std::vector<std::vector<std::pair<int, long long int> > >' and 'std::vector<std::vector<std::pair<int, int> > >')
   90 |     up=vector<vector<pair<int,int>>>(n+1);
      |                                         ^
In file included from /usr/include/c++/13/vector:72,
                 from factories.cpp:3:
/usr/include/c++/13/bits/vector.tcc:210:5: note: candidate: 'constexpr std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = std::vector<std::pair<int, long long int> >; _Alloc = std::allocator<std::vector<std::pair<int, long long int> > >]'
  210 |     vector<_Tp, _Alloc>::
      |     ^~~~~~~~~~~~~~~~~~~
/usr/include/c++/13/bits/vector.tcc:211:42: note:   no known conversion for argument 1 from 'std::vector<std::vector<std::pair<int, int> > >' to 'const std::vector<std::vector<std::pair<int, long long int> > >&'
  211 |     operator=(const vector<_Tp, _Alloc>& __x)
      |               ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
In file included from /usr/include/c++/13/vector:66:
/usr/include/c++/13/bits/stl_vector.h:766:7: note: candidate: 'constexpr std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(std::vector<_Tp, _Alloc>&&) [with _Tp = std::vector<std::pair<int, long long int> >; _Alloc = std::allocator<std::vector<std::pair<int, long long int> > >]'
  766 |       operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move())
      |       ^~~~~~~~
/usr/include/c++/13/bits/stl_vector.h:766:26: note:   no known conversion for argument 1 from 'std::vector<std::vector<std::pair<int, int> > >' to 'std::vector<std::vector<std::pair<int, long long int> > >&&'
  766 |       operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move())
      |                 ~~~~~~~~~^~~
/usr/include/c++/13/bits/stl_vector.h:788:7: note: candidate: 'constexpr std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(std::initializer_list<_Tp>) [with _Tp = std::vector<std::pair<int, long long int> >; _Alloc = std::allocator<std::vector<std::pair<int, long long int> > >]'
  788 |       operator=(initializer_list<value_type> __l)
      |       ^~~~~~~~
/usr/include/c++/13/bits/stl_vector.h:788:46: note:   no known conversion for argument 1 from 'std::vector<std::vector<std::pair<int, int> > >' to 'std::initializer_list<std::vector<std::pair<int, long long int> > >'
  788 |       operator=(initializer_list<value_type> __l)
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~