Submission #1155833

#TimeUsernameProblemLanguageResultExecution timeMemory
1155833LudisseyCat in a tree (BOI17_catinatree)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> #define int long long #define sz(a) (int)a.size() #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() using namespace std; int n,d; vector<vector<int>> neigh; vector<int> index; vector<int> memo; vector<int> dist; vector<int> childC; int mxC=0; int build_tree(int x, int p){ childC[x]=1; for (int t=0; t<sz(neigh[x]); t++) { int u=neigh[x][t]; if(u==p||index[u]>=0) continue; childC[x]+=build_tree(u,x); } return childC[x]; } int centroid(int x, int p, int _n){ for (int t=0; t<sz(neigh[x]); t++) { int u=neigh[x][t]; if(u==p||index[u]>=0) continue; if(childC[u]*2>=_n) return centroid(u,x,_n); } return x; } void decompo(int x, int compoINDEX){ build_tree(x,-1); if(childC[x]==1) { index[x]=compoINDEX; mxC=max(compoINDEX,mxC); return;} int c=centroid(x,-1,childC[x]); index[c]=compoINDEX; mxC=max(compoINDEX,mxC); for (auto u : neigh[c]) { if(index[u]>=0) continue; decompo(u,compoINDEX+1); } } int calc(int x, int p, int dst, int indx){ dist[min(d,dst)]=max(dist[min(d,dst)],memo[x]); int mx=dst; for (auto u : neigh[x]) { if(u==p||index[u]<=indx) continue; mx=max(mx,calc(u,x,dst+1,indx)); } return mx; } int dp(int x){ if(memo[x]!=-1) return memo[x]; vector<vector<int>> clc(sz(neigh[x])); int mxS=0; for (int t=0; t<sz(neigh[x]); t++) { int u=neigh[x][t]; if(index[u]<=index[x]) continue; mxS=max(calc(u,x,1,index[x]),mxS); clc[t].resize(1); clc[t][0]=0; for (int i = 1; i <= d; i++) { if(dist[i]==-1) break; clc[t][i]=dist[i]; dist[i]=-1; } } mxS++; vector<pair<int,int>> mxdist(mxS,{-1,-1}); mxdist[0]={0,0}; for (int t=0; t<sz(neigh[x]); t++) { int u=neigh[x][t]; if(index[u]<=index[x]) continue; for (int i = 0; i < sz(clc); i++) { if(clc[t][i]>mxdist[i].first) { mxdist[i].second=mxdist[i].first; mxdist[i].first=clc[t][i]; } else if(clc[t][i]>mxdist[i].second) mxdist[i].second=clc[t][i]; } } memo[x]=1; for (int t=0; t<sz(neigh[x]); t++) { int u=neigh[x][t]; if(index[u]<=index[x]) continue; for (int i = 0; i < sz(clc); i++) { if(d-i>=sz(mxdist)) continue; int v=mxdist[d-i].first; if(d-i<=sz(clc)&&v==clc[t][d-i]) v=mxdist[d-i].second; memo[x]=max(memo[x],v+clc[t][i]+2); } } return memo[x]; } signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> d; index.resize(n,-1); childC.resize(n); dist.resize(d+1,-1); neigh.resize(n); memo.resize(n,-1); for (int i = 1; i < n; i++) { int x; cin >> x; neigh[x].push_back(i); neigh[i].push_back(x); } decompo(0,0); mxC++; vector<vector<int>> grp(mxC); for (int i = 0; i < n; i++) { grp[index[i]].push_back(i); } int ans=0; for (int c = mxC-1; c >= 0; c--) { for (auto u : grp[c]) { ans=max(ans,dp(u)); } } cout << ans << "\n"; return 0; }

Compilation message (stderr)

catinatree.cpp:11:13: error: 'std::vector<long long int> index' redeclared as different kind of entity
   11 | vector<int> index;
      |             ^~~~~
In file included from /usr/include/string.h:462,
                 from /usr/include/c++/11/cstring:42,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:48,
                 from catinatree.cpp:1:
/usr/include/strings.h:61:1: note: previous declaration 'const char* index(const char*, int)'
   61 | index (const char *__s, int __c) __THROW
      | ^~~~~
catinatree.cpp: In function 'long long int build_tree(long long int, long long int)':
catinatree.cpp:23:23: error: invalid types '<unresolved overloaded function type>[long long int]' for array subscript
   23 |         if(u==p||index[u]>=0) continue;
      |                       ^
catinatree.cpp: In function 'long long int centroid(long long int, long long int, long long int)':
catinatree.cpp:33:23: error: invalid types '<unresolved overloaded function type>[long long int]' for array subscript
   33 |         if(u==p||index[u]>=0) continue;
      |                       ^
catinatree.cpp: In function 'void decompo(long long int, long long int)':
catinatree.cpp:41:29: error: invalid types '<unresolved overloaded function type>[long long int]' for array subscript
   41 |     if(childC[x]==1) { index[x]=compoINDEX; mxC=max(compoINDEX,mxC); return;}
      |                             ^
catinatree.cpp:43:10: error: invalid types '<unresolved overloaded function type>[long long int]' for array subscript
   43 |     index[c]=compoINDEX;
      |          ^
catinatree.cpp:47:17: error: invalid types '<unresolved overloaded function type>[long long int]' for array subscript
   47 |         if(index[u]>=0) continue;
      |                 ^
catinatree.cpp: In function 'long long int calc(long long int, long long int, long long int, long long int)':
catinatree.cpp:56:23: error: invalid types '<unresolved overloaded function type>[long long int]' for array subscript
   56 |         if(u==p||index[u]<=indx) continue;
      |                       ^
catinatree.cpp: In function 'long long int dp(long long int)':
catinatree.cpp:69:17: error: invalid types '<unresolved overloaded function type>[long long int]' for array subscript
   69 |         if(index[u]<=index[x]) continue;
      |                 ^
catinatree.cpp:69:27: error: invalid types '<unresolved overloaded function type>[long long int]' for array subscript
   69 |         if(index[u]<=index[x]) continue;
      |                           ^
catinatree.cpp:70:33: error: invalid types '<unresolved overloaded function type>[long long int]' for array subscript
   70 |         mxS=max(calc(u,x,1,index[x]),mxS);
      |                                 ^
catinatree.cpp:86:17: error: invalid types '<unresolved overloaded function type>[long long int]' for array subscript
   86 |         if(index[u]<=index[x]) continue;
      |                 ^
catinatree.cpp:86:27: error: invalid types '<unresolved overloaded function type>[long long int]' for array subscript
   86 |         if(index[u]<=index[x]) continue;
      |                           ^
catinatree.cpp:97:17: error: invalid types '<unresolved overloaded function type>[long long int]' for array subscript
   97 |         if(index[u]<=index[x]) continue;
      |                 ^
catinatree.cpp:97:27: error: invalid types '<unresolved overloaded function type>[long long int]' for array subscript
   97 |         if(index[u]<=index[x]) continue;
      |                           ^
catinatree.cpp: In function 'int main()':
catinatree.cpp:112:11: error: overloaded function with no contextual type information
  112 |     index.resize(n,-1); childC.resize(n); dist.resize(d+1,-1); neigh.resize(n); memo.resize(n,-1);
      |           ^~~~~~
catinatree.cpp:124:18: error: invalid types '<unresolved overloaded function type>[long long int]' for array subscript
  124 |         grp[index[i]].push_back(i);
      |                  ^