Submission #650197

#TimeUsernameProblemLanguageResultExecution timeMemory
650197inksamuraiDostavljač (COCI18_dostavljac)C++17
140 / 140
12 ms2004 KiB
#include <bits/stdc++.h> using namespace std; #define rep(i,n) for(int i=0;i<n;i++) #define rng(i,c,n) for(int i=c;i<n;i++) #define per(i,n) for(int i=n-1;i>=0;i--) #define fi first #define se second #define pb push_back #define sz(a) (int)a.size() #define vec(...) vector<__VA_ARGS__> #define _3yqVz8E ios::sync_with_stdio(0),cin.tie(0) typedef long long ll; using pii=pair<int,int>; using vi=vector<int>; void print(){cout<<'\n';} template<class h,class...t> void print(const h&v,const t&...u){cout<<v<<' ',print(u...);} // e signed main(){ _3yqVz8E; int n,m; cin>>n>>m; vi a(n); rep(i,n){ cin>>a[i]; } vec(vi) adj(n); rep(i,n-1){ int u,v; cin>>u>>v; u-=1,v-=1; adj[u].pb(v); adj[v].pb(u); } vi par(n,-1); vi cnt(n); auto dfs=[&](auto self,int v,int _par)->void{ par[v]=_par; cnt[v]=1; for(auto u:adj[v]){ if(u!=_par){ self(self,u,v); cnt[v]+=cnt[u]; } } }; dfs(dfs,0,-1); vec(vec(vi)) dp(n); auto rfs=[&](auto self,int v,int _par)->void{ int si=1; vec(vi) fdp(si+1,vi(2)); fdp[1][0]=fdp[1][1]=a[v]; for(auto u:adj[v]){ if(u==_par) continue; self(self,u,v); int ad=sz(dp[u])-1; int nsi=si+ad+2; vec(vi) nfdp(nsi+1,vi(2)); for(int i=0;i<=si;i++){ nfdp[i][0]=max(nfdp[i][0],fdp[i][0]); nfdp[i][1]=max(nfdp[i][1],fdp[i][1]); for(int j=0;j<=ad;j++){ nfdp[i+j+2][0]=max(nfdp[i+j+2][0],fdp[i][0]+dp[u][j][0]); nfdp[i+j+1][1]=max(nfdp[i+j+1][1],fdp[i][0]+dp[u][j][1]); nfdp[i+j+2][1]=max(nfdp[i+j+2][1],fdp[i][1]+dp[u][j][0]); } } fdp.swap(nfdp); si=nsi; } dp[v].swap(fdp); }; rfs(rfs,0,0); int ans=0; rep(i,min(m+1,sz(dp[0])))ans=max({ans,dp[0][i][0],dp[0][i][1]}); print(ans); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...