Submission #469044

#TimeUsernameProblemLanguageResultExecution timeMemory
469044wdjpngChase (CEOI17_chase)C++17
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> // /#pragma GCC optimize ("O3") // /#pragma GCC optimize ("unroll-loops") #define int long long #define rep(i,n) for(int i = 0; i < n; i++) using namespace std; int n,v; vector<int>p; vector<vector<int>>mem; vector<vector<signed>>E; vector<vector<signed>>takei; vector<vector<signed>>notakei; vector<vector<int>>takemaxx; vector<vector<int>>takealtmaxx; vector<vector<int>>notakealtmaxx; vector<vector<int>>notakemaxx; int dfs(int pos, int bc, int parent) { if(mem[pos][bc]!=-1) return mem[pos][bc]; if(bc==0) return 0; int sum = 0; for(int w : E[pos]) { if(w==parent) continue; sum+=p[w]; } int maxx = 0; takemaxx[pos][bc]=0; takei[pos][bc] = -1; notakemaxx[pos][bc]=0; notakei[pos][bc] = -1; for(int w : E[pos]) { if(w==parent) continue; int nt = dfs(w, bc, pos); int t = dfs(w, bc-1, pos) + sum; int cur = max(nt, t); if(nt>notakemaxx[pos][bc]) { notakei[pos][bc] = w; notakemaxx[pos][bc] = nt; } if(t>takemaxx[pos][bc]) { takei[pos][bc] = w; takemaxx[pos][bc] = t; } maxx=max(maxx, cur); } takealtmaxx[pos][bc] = 0; notakealtmaxx[pos][bc]=0; for(int w : E[pos]) { if(w==parent) continue; int nt dfs(w, bc, pos); int t = dfs(w, bc-1, pos) + sum - p[usednode[pos][bc]]; if(takei[pos][bc]!=-1&&takei[pos][bc]!=w) { takealtmaxx[pos][bc]=max(takealtmaxx[pos][bc], t); } if(notakei[pos][bc]!=-1&&notakei[pos][bc]!=w) { notakealtmaxx[pos][bc]=max(notakealtmaxx[pos][bc], nt); } } return mem[pos][bc] = maxx; } int bruteforce() { int maxx=0; rep(i, n) { mem.assign(n+1, vector<int>(v+1, -1)); maxx=max(maxx, dfs(i+1, v, -1)); } return maxx; } int mx=0; void meta_dfs(int pos, int parent) { mx = max(mx, dfs(pos, v, -1)); for(int w : E[pos]) { if(w==parent) continue; for(int i = 1; i<= v; i++) { mem[pos][i] = 0; if(takei[pos][i]!=w) mem[pos][i] = max(mem[pos][i], takemaxx[pos][i]-p[w]+p[parent]); else mem[pos][i] = max(mem[pos][i], takealtmaxx[pos][i]-p[w]+p[parent]); if(notakei[pos][i]!=w) mem[pos][i] = max(mem[pos][i], notakemaxx[pos][i]); else mem[pos][i] = max(mem[pos][i], notakealtmaxx[pos][i]); } mem[w][v] = -1; meta_dfs(w,pos); } } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cin>>n>>v; p.resize(n+1); rep(i, n) cin>>p[i+1]; E.resize(n+1); mem.assign(n+1, vector<int>(v+1, -1)); rep(i,n-1) { signed a,b; cin>>a>>b; E[a].push_back(b); E[b].push_back(a); } //int maxx = dfs(1, v, -1); //if(n<=1000) maxx = bruteforce(); //cout<<maxx<<"\n"; usednode.assign(n+1, vector<signed>(v+1)); maxwithnode.assign(n+1, vector<int>(v+1)); maxnonode.assign(n+1, vector<int>(v+1)); mem.assign(n+1, vector<int>(v+1, -1)); takei.assign(n+1, vector<signed>(v+1, -1)); notakei.assign(n+1, vector<signed>(v+1, -1)); takemaxx.assign(n+1, vector<int>(v+1, -1)); notakemaxx.assign(n+1, vector<int>(v+1, -1)); meta_dfs(1, -1); cout<<mx<<"\n"; }

Compilation message (stderr)

chase.cpp: In function 'long long int dfs(long long int, long long int, long long int)':
chase.cpp:68:16: error: expected initializer before 'dfs'
   68 |         int nt dfs(w, bc, pos);
      |                ^~~
chase.cpp:69:45: error: 'usednode' was not declared in this scope
   69 |         int t = dfs(w, bc-1, pos) + sum - p[usednode[pos][bc]];
      |                                             ^~~~~~~~
chase.cpp:76:64: error: 'nt' was not declared in this scope; did you mean 't'?
   76 |             notakealtmaxx[pos][bc]=max(notakealtmaxx[pos][bc], nt);
      |                                                                ^~
      |                                                                t
chase.cpp: In function 'int main()':
chase.cpp:138:5: error: 'usednode' was not declared in this scope
  138 |     usednode.assign(n+1, vector<signed>(v+1));
      |     ^~~~~~~~
chase.cpp:139:5: error: 'maxwithnode' was not declared in this scope
  139 |     maxwithnode.assign(n+1, vector<int>(v+1));
      |     ^~~~~~~~~~~
chase.cpp:140:5: error: 'maxnonode' was not declared in this scope
  140 |     maxnonode.assign(n+1, vector<int>(v+1));
      |     ^~~~~~~~~