Submission #101408

#TimeUsernameProblemLanguageResultExecution timeMemory
101408dwscChase (CEOI17_chase)C++14
0 / 100
4030 ms11972 KiB
#include <bits/stdc++.h> using namespace std; int n,v; int p[100010]; vector<int> adj[100010]; long long dp(int x,int dist,int pa){ if (dist == -1) return -1e18; // cout << x << " " << dist << " " << pa << '\n'; long long ans = 0; long long sum = 0; for (int i = 0; i < (int)(adj[x].size()); i++){ int nx = adj[x][i]; if (nx == pa) continue; ans = max(ans,dp(nx,dist,x)); sum += p[nx]; } // cout << sum << "\n"; ans = max(ans,sum); for (int i = 0; i < (int)(adj[x].size()); i++){ int nx = adj[x][i]; if (nx == pa) continue; ans = max(ans,dp(nx,dist-1,x)+sum-p[nx]); } return ans; } int main(){ cin >> n >> v; for (int i = 0; i < n; i++){ cin >> p[i]; } for (int i = 0; i < n-1; i++){ int a,b; cin >> a >> b; a--; b--; adj[a].push_back(b); adj[b].push_back(a); } if (n <= 1000){ long long ans = 0; for (int i = 0; i < n; i++){ // cout << dp(i,v,-1) << "\n"; ans = max(ans,dp(i,v,-1)); } cout << ans; } else cout << dp(0,v,-1); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...