제출 #619227

#제출 시각아이디문제언어결과실행 시간메모리
619227HappyPacManDynamic Diameter (CEOI19_diameter)C++14
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int maxn = 1e5 + 3; vector<pair<int,int> > adj[maxn],edges; vector<int> partOf[maxn]; vector<ll> seg[maxn],lazy[maxn]; bool isCent[maxn]; int subSz[maxn],centRoot,timer[maxn]; unordered_map<int,int> tin[maxn],tout[maxn],edgeRoot[maxn]; unordered_map<int,ll> costEdge[maxn]; ll tempResult[maxn]; priority_queue<pair<ll,int> > bestEdge[maxn],result; ll cost[maxn]; void dfsSz(int u,int p){ subSz[u] = 1; for(auto [v,w] : adj[u]){ if(v != p && !isCent[v]){ dfsSz(v,u); subSz[u] += subSz[v]; } } } int fnCent(int u,int p,int s){ for(auto [v,w] : adj[u]){ if(v != p && !isCent[v] && subSz[v] > s/2){ return fnCent(v,u,s); } } return u; } void dfsTour(int c,int u,int p){ for(auto [v,w] : adj[u]){ if(v != p && !isCent[v]){ partOf[w].emplace_back(c); tin[c][w] = timer[c]++; dfsTour(c,v,u); tout[c][w] = timer[c]++; } } } void dfsEdgeRoot(int c,int d,int u,int p){ for(auto [v,w] : adj[u]){ if(v != p && !isCent[v]){ edgeRoot[c][w] = d; dfsEdgeRoot(c,d,v,u); } } } void dfsCent(int u,int p){ dfsSz(u,p); int cent = fnCent(u,u,subSz[u]); isCent[cent] = true; if(p != -1){ centRoot = cent; } dfsTour(cent,cent,cent); for(auto [v,w] : adj[cent]){ if(!isCent[v]){ bestEdge[cent].emplace(0,w); edgeRoot[cent][w] = w; dfsEdgeRoot(cent,w,v,cent); } } seg[cent].resize(4*timer[cent]); lazy[cent].resize(4*timer[cent]); for(auto [v,w] : adj[cent]){ if(!isCent[v]){ dfsCent(v,cent); } } } // Segment Tree + Lazy Propagation void push(int c,int i){ lazy[c][i<<1] += lazy[c][i]; seg[c][i<<1] += lazy[c][i]; lazy[c][i<<1|1] += lazy[c][i]; seg[c][i<<1|1] += lazy[c][i]; lazy[c][i] = 0; } void upd(int c,int i,int l,int r,int ul,int ur,ll v){ if(ul <= l && r <= ur){ seg[c][i] += v; lazy[c][i] += v; }else if(ul > r || ur < l){ return; }else{ int m = (l+r)/2; push(c,i); upd(c,i<<1,l,m,ul,ur,v); upd(c,i<<1|1,m+1,r,ul,ur,v); seg[c][i] = max(seg[c][i<<1],seg[c][i<<1|1]); } } ll qry(int c,int i,int l,int r,int ql,int qr){ if(ql <= l && r <= qr){ return seg[c][i]; }else if(ql > r || qr < l){ return 0; }else{ int m = (l+r)/2; push(c,i); return max(qry(c,i<<1,l,m,ql,qr),qry(c,i<<1|1,m+1,r,ql,qr)); } } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n,q; ll w; cin >> n >> q >> w; for(int i=1;i<n;i++){ int u,v; ll w; cin >> u >> v >> w; u--; v--; adj[u].emplace_back(v,i); adj[v].emplace_back(u,i); edges.emplace_back(u,v); cost[i] = w; } dfsCent(0,-1); for(int i=1;i<n;i++){ for(int it : partOf[i]){ int z = edgeRoot[it][i]; upd(it,1,0,timer[it]-1,tin[it][i],tout[it][i]-1,cost[i]); costEdge[it][z] = qry(it,1,0,timer[it]-1,tin[it][z],tout[it][z]); bestEdge[it].emplace(costEdge[it][z],z); } } for(int i=0;i<n;i++){ vector<pair<ll,int> > best; while(!bestEdge[i].empty() && best.size() < 2){ auto [u,v] = bestEdge[i].top(); bestEdge[i].pop(); if(costEdge[i][v] == u && (best.empty() || best.back() != make_pair(u,v))){ best.emplace_back(u,v); } } ll sum = 0; for(auto it : best){ sum += it.first; } for(auto it : best){ bestEdge[i].emplace(it); } tempResult[i] = sum; result.emplace(tempResult[i],i); } ll last = 0; while(q--){ int i; ll j; cin >> i >> j; i = (i+last)%(n-1)+1; j = (j+last)%w; ll df = j-cost[i]; assert(partOf[i] <= 20); for(int it : partOf[i]){ int z = edgeRoot[it][i]; upd(it,1,0,timer[it]-1,tin[it][i],tout[it][i]-1,df); costEdge[it][z] = qry(it,1,0,timer[it]-1,tin[it][z],tout[it][z]); bestEdge[it].emplace(costEdge[it][z],z); vector<pair<ll,int> > best; while(!bestEdge[it].empty() && best.size() < 2){ auto [u,v] = bestEdge[it].top(); bestEdge[it].pop(); if(costEdge[it][v] == u && (best.empty() || best.back() != make_pair(u,v))){ best.emplace_back(u,v); } } ll sum = 0; for(auto it2 : best){ sum += it2.first; } for(auto it2 : best){ bestEdge[it].emplace(it2); } tempResult[it] = sum; result.emplace(tempResult[it],it); } cost[i] = j; while(true){ auto [u,v] = result.top(); if(tempResult[v] == u){ break; } result.pop(); } last = result.top().first; cout << result.top().first << "\n"; } }

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

diameter.cpp: In function 'void dfsSz(int, int)':
diameter.cpp:18:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   18 |  for(auto [v,w] : adj[u]){
      |           ^
diameter.cpp: In function 'int fnCent(int, int, int)':
diameter.cpp:26:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   26 |  for(auto [v,w] : adj[u]){
      |           ^
diameter.cpp: In function 'void dfsTour(int, int, int)':
diameter.cpp:34:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   34 |  for(auto [v,w] : adj[u]){
      |           ^
diameter.cpp: In function 'void dfsEdgeRoot(int, int, int, int)':
diameter.cpp:44:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   44 |  for(auto [v,w] : adj[u]){
      |           ^
diameter.cpp: In function 'void dfsCent(int, int)':
diameter.cpp:59:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   59 |  for(auto [v,w] : adj[cent]){
      |           ^
diameter.cpp:68:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   68 |  for(auto [v,w] : adj[cent]){
      |           ^
diameter.cpp: In function 'int32_t main()':
diameter.cpp:138:9: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  138 |    auto [u,v] = bestEdge[i].top();
      |         ^
In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from diameter.cpp:1:
diameter.cpp:162:20: error: no match for 'operator<=' (operand types are 'std::vector<int>' and 'int')
  162 |   assert(partOf[i] <= 20);
      |          ~~~~~~~~~ ^~ ~~
      |                  |    |
      |                  |    int
      |                  std::vector<int>
In file included from /usr/include/c++/10/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:110,
                 from diameter.cpp:1:
/usr/include/c++/10/bits/regex.h:1086:5: note: candidate: 'template<class _BiIter> bool std::__cxx11::operator<=(const std::__cxx11::sub_match<_BiIter>&, const std::__cxx11::sub_match<_BiIter>&)'
 1086 |     operator<=(const sub_match<_BiIter>& __lhs, const sub_match<_BiIter>& __rhs)
      |     ^~~~~~~~
/usr/include/c++/10/bits/regex.h:1086:5: note:   template argument deduction/substitution failed:
In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from diameter.cpp:1:
diameter.cpp:162:23: note:   'std::vector<int>' is not derived from 'const std::__cxx11::sub_match<_BiIter>'
  162 |   assert(partOf[i] <= 20);
      |                       ^~
In file included from /usr/include/c++/10/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:110,
                 from diameter.cpp:1:
/usr/include/c++/10/bits/regex.h:1192:5: note: candidate: 'template<class _Bi_iter, class _Ch_traits, class _Ch_alloc> bool std::__cxx11::operator<=(std::__cxx11::__sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>&, const std::__cxx11::sub_match<_BiIter>&)'
 1192 |     operator<=(const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/10/bits/regex.h:1192:5: note:   template argument deduction/substitution failed:
In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from diameter.cpp:1:
diameter.cpp:162:23: note:   'std::vector<int>' is not derived from 'std::__cxx11::__sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>'
  162 |   assert(partOf[i] <= 20);
      |                       ^~
In file included from /usr/include/c++/10/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:110,
                 from diameter.cpp:1:
/usr/include/c++/10/bits/regex.h:1285:5: note: candidate: 'template<class _Bi_iter, class _Ch_traits, class _Ch_alloc> bool std::__cxx11::operator<=(const std::__cxx11::sub_match<_BiIter>&, std::__cxx11::__sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>&)'
 1285 |     operator<=(const sub_match<_Bi_iter>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/10/bits/regex.h:1285:5: note:   template argument deduction/substitution failed:
In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from diameter.cpp:1:
diameter.cpp:162:23: note:   'std::vector<int>' is not derived from 'const std::__cxx11::sub_match<_BiIter>'
  162 |   assert(partOf[i] <= 20);
      |                       ^~
In file included from /usr/include/c++/10/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:110,
                 from diameter.cpp:1:
/usr/include/c++/10/bits/regex.h:1359:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator<=(const typename std::iterator_traits<_Iter>::value_type*, const std::__cxx11::sub_match<_BiIter>&)'
 1359 |     operator<=(typename iterator_traits<_Bi_iter>::value_type const* __lhs,
      |     ^~~~~~~~
/usr/include/c++/10/bits/regex.h:1359:5: note:   template argument deduction/substitution failed:
In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from diameter.cpp:1:
diameter.cpp:162:23: note:   mismatched types 'const std::__cxx11::sub_match<_BiIter>' and 'int'
  162 |   assert(partOf[i] <= 20);
      |                       ^~
In file included from /usr/include/c++/10/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:110,
                 from diameter.cpp:1:
/usr/include/c++/10/bits/regex.h:1453:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator<=(const std::__cxx11::sub_match<_BiIter>&, const typename std::iterator_traits<_Iter>::value_type*)'
 1453 |     operator<=(const sub_match<_Bi_iter>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/10/bits/regex.h:1453:5: note:   template argument deduction/substitution failed:
In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from diameter.cpp:1:
diameter.cpp:162:23: note:   'std::vector<int>' is not derived from 'const std::__cxx11::sub_match<_BiIter>'
  162 |   assert(partOf[i] <= 20);
      |                       ^~
In file included from /usr/include/c++/10/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:110,
                 from diameter.cpp:1:
/usr/include/c++/10/bits/regex.h:1531:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator<=(const typename std::iterator_traits<_Iter>::value_type&, const std::__cxx11::sub_match<_BiIter>&)'
 1531 |     operator<=(typename iterator_traits<_Bi_iter>::value_type const& __lhs,
      |     ^~~~~~~~
/usr/include/c++/10/bits/regex.h:1531:5: note:   template argument deduction/substitution failed:
In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from diameter.cpp:1:
diameter.cpp:162:23: note:   mismatched types 'const std::__cxx11::sub_match<_BiIter>' and 'int'
  162 |   assert(partOf[i] <= 20);
      |                       ^~
In file included from /usr/include/c++/10/regex:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:110,
                 from diameter.cpp:1:
/usr/include/c++/10/bits/regex.h:1631:5: note: candidate: 'template<class _Bi_iter> bool std::__cxx11::operator<=(const std::__cxx11::sub_match<_BiIter>&, const typename std::iterator_traits<_Iter>::value_type&)'
 1631 |     operator<=(const sub_match<_Bi_iter>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/10/bits/regex.h:1631:5: note:   template argument deduction/substitution failed:
In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from diameter.cpp:1:
diameter.cpp:162:23: note:   'std::vector<int>' is not derived from 'const std::__cxx11::sub_match<_BiIter>'
  162 |   assert(partOf[i] <= 20);
      |                       ^~
In file included from /usr/include/c++/10/bits/stl_algobase.h:64,
                 from /usr/include/c++/10/bits/char_traits.h:39,
                 from /usr/include/c++/10/ios:40,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from diameter.cpp:1:
/usr/include/c++/10/bits/stl_pair.h:508:5: note: candidate: 'template<class _T1, class _T2> constexpr bool std::operator<=(const std::pair<_T1, _T2>&, const std::pair<_T1, _T2>&)'
  508 |     operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
      |     ^~~~~~~~
/usr/include/c++/10/bits/stl_pair.h:508:5: note:   template argument deduction/substitution failed:
In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from diameter.cpp:1:
diameter.cpp:162:23: note:   'std::vector<int>' is not derived from 'const std::pair<_T1, _T2>'
  162 |   assert(partOf[i] <= 20);
      |                       ^~
In file included from /usr/include/c++/10/bits/stl_algobase.h:67,
                 from /usr/include/c++/10/bits/char_traits.h:39,
                 from /usr/include/c++/10/ios:40,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from diameter.cpp:1:
/usr/include/c++/10/bits/stl_iterator.h:384:5: note: candidate: 'template<class _Iterator> bool std::operator<=(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_Iterator>&)'
  384 |     operator<=(const reverse_iterator<_Iterator>& __x,
      |     ^~~~~~~~
/usr/include/c++/10/bits/stl_iterator.h:384:5: note:   template argument deduction/substitution failed:
In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from diameter.cpp:1:
diameter.cpp:162:23: note:   'std::vector<int>' is not derived from 'const std::reverse_iterator<_Iterator>'
  162 |   assert(partOf[i] <= 20);
      |                       ^~
In file included from /usr/include/c++/10/bits/stl_algobase.h:67,
                 from /usr/include/c++/10/bits/char_traits.h:39,
                 from /usr/include/c++/10/ios:40,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from diameter.cpp:1:
/usr/include/c++/10/bits/stl_iterator.h:422:5: note: candidate: 'template<class _IteratorL, class _IteratorR> bool std::operator<=(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_IteratorR>&)'
  422 |     operator<=(const reverse_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/10/bits/stl_iterator.h:422:5: note:   template argument deduction/substitution failed:
In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from diameter.cpp:1:
diameter.cpp:162:23: note:   'std::vector<int>' is not derived from 'const std::reverse_iterator<_Iterator>'
  162 |   assert(partOf[i] <= 20);
      |                       ^~
In file included from /usr/include/c++/10/bits/stl_algobase.h:67,
                 from /usr/include/c++/10/bits/char_traits.h:39,
                 from /usr/include/c++/10/ios:40,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from diameter.cpp:1:
/usr/include/c++/10/bits/stl_iterator.h:1460:5: note: candidate: 'template<class _IteratorL, class _IteratorR> bool std::operator<=(const std::move_iterator<_IteratorL>&, const std::move_iterator<_IteratorR>&)'
 1460 |     operator<=(const move_iterator<_IteratorL>& __x,
      |     ^~~~~~~~
/usr/include/c++/10/bits/stl_iterator.h:1460:5: note:   template argument deduction/substitution failed:
In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from diameter.cpp:1:
diameter.cpp:162:23: note:   'std::vector<int>' is not derived from 'const std::move_iterator<_IteratorL>'
  162 |   assert(partOf[i] <= 20);
      |                       ^~
In file included from /usr/include/c++/10/bits/stl_algobase.h:67,
                 from /usr/include/c++/10/bits/char_traits.h:39,
                 from /usr/include/c++/10/ios:40,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from diameter.cpp:1:
/usr/include/c++/10/bits/stl_iterator.h:1513:5: note: candidate: 'template<class _Iterator> bool std::operator<=(const std::move_iterator<_IteratorL>&, const std::move_iterator<_IteratorL>&)'
 1513 |     operator<=(const move_iterator<_Iterator>& __x,
      |     ^~~~~~~~
/usr/include/c++/10/bits/stl_iterator.h:1513:5: note:   template argument deduction/substitution failed:
In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from diameter.cpp:1:
diameter.cpp:162:23: note:   'std::vector<int>' is not derived from 'const std::move_iterator<_IteratorL>'
  162 |   assert(partOf[i] <= 20);
      |                       ^~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from diameter.cpp:1:
/usr/include/c++/10/bits/basic_string.h:6343:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator<=(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&)'
 6343 |     operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/10/bits/basic_string.h:6343:5: note:   template argument deduction/substitution failed:
In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from diameter.cpp:1:
diameter.cpp:162:23: note:   'std::vector<int>' is not derived from 'const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>'
  162 |   assert(partOf[i] <= 20);
      |                       ^~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from diameter.cpp:1:
/usr/include/c++/10/bits/basic_string.h:6356:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator<=(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _CharT*)'
 6356 |     operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
      |     ^~~~~~~~
/usr/include/c++/10/bits/basic_string.h:6356:5: note:   template argument deduction/substitution failed:
In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from diameter.cpp:1:
diameter.cpp:162:23: note:   'std::vector<int>' is not derived from 'const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>'
  162 |   assert(partOf[i] <= 20);
      |                       ^~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/bits/locale_classes.h:40,
                 from /usr/include/c++/10/bits/ios_base.h:41,
                 from /usr/include/c++/10/ios:42,
                 from /usr/include/c++/10/istream:38,
                 from /usr/include/c++/10/sstream:38,
                 from /usr/include/c++/10/complex:45,
                 from /usr/include/c++/10/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:54,
                 from diameter.cpp:1:
/usr/include/c++/10/bits/basic_string.h:6368:5: note: candidate: 'template<class _CharT, class _Traits, class _Alloc> bool std::operator<=(const _CharT*, const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&)'
 6368 |     operator<=(const _CharT* __lhs,
      |     ^~~~~~~~
/usr/include/c++/10/bits/basic_string.h:6368:5: note:   template argument deduction/substitution failed:
In file included from /usr/include/c++/10/cassert:44,
                 from /usr/inc