제출 #101399

#제출 시각아이디문제언어결과실행 시간메모리
101399dwscChase (CEOI17_chase)C++14
0 / 100
155 ms6212 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){ // 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; sum += p[nx]; } // cout << sum << "\n"; if (dist == 0) return 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); } /* 12 2 2 3 3 8 1 5 6 7 8 3 5 4 2 1 2 7 3 4 4 7 7 6 5 6 6 8 6 9 7 10 10 11 10 12 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...