제출 #578522

#제출 시각아이디문제언어결과실행 시간메모리
578522andrei_boacaChase (CEOI17_chase)C++14
70 / 100
778 ms96096 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll n,v,p[100005],par[100005],dp[100005][105]; vector<ll> muchii[100005]; ll ans=0; ll MAXROOT=1; void dfs(int nod) { for(int i=1;i<=v;i++) dp[nod][i]=0; ll suma=0; int cnt=0; for(int i:muchii[nod]) if(i!=par[nod]) { suma+=p[i]; par[i]=nod; cnt++; dfs(i); } for(int j=1;j<=v;j++) { dp[nod][j]=dp[nod][j-1]; for(int i:muchii[nod]) if(i!=par[nod]) { dp[nod][j]=max(dp[nod][j],dp[i][j]); dp[nod][j]=max(dp[nod][j],dp[i][j-1]+suma); } } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin>>n>>v; for(int i=1;i<=n;i++) cin>>p[i]; for(int i=1;i<n;i++) { int a,b; cin>>a>>b; muchii[a].push_back(b); muchii[b].push_back(a); } if(n<=1000) MAXROOT=n; for(int root=1;root<=MAXROOT;root++) { for(int i=1;i<=n;i++) par[i]=0; dfs(root); for(int i=1;i<=v;i++) ans=max(ans,dp[root][i]); } cout<<ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...