제출 #468973

#제출 시각아이디문제언어결과실행 시간메모리
468973wdjpngChase (CEOI17_chase)C++17
70 / 100
2357 ms94788 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<int>>E; 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; for(int w : E[pos]) { if(w==parent) continue; maxx=max(maxx, dfs(w, bc, pos)); maxx=max(maxx, dfs(w, bc-1, pos) + sum); } 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; } signed main() { 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) { int 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"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...