Submission #967494

#TimeUsernameProblemLanguageResultExecution timeMemory
967494vjudge1Dostavljač (COCI18_dostavljac)C++17
56 / 140
322 ms2380 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ld long double #define ull unsigned long long #define pii pair<int,int> #define pll pair<long long, long long> #define fi first #define se second #define all(a) (a).begin(), (a).end() #define pb push_back #define lwb lower_bound #define upb upper_bound #define TASKNAME "NAME" void init() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ///freopen(TASKNAME".INP","r",stdin); freopen(TASKNAME".OUT","w",stdout); } const int SZ = 5e2+5; const ll INF = INT_MAX / 2, MOD = 1e9+7, INFLL = 2e18; const double epsilon = 1e-3; int n,m, a[SZ], dp[SZ][SZ][2]; vector<int> adj[SZ]; void dfs(int u, int pre) { for(int v : adj[u]) { if(v == pre) continue; dfs(v, u); vector<int> tem[2]; tem[0].resize(m + 1, 0); tem[1].resize(m + 1, 0); for(int j = 0; j <= m; j++) { for(int k = 0; k < j; k++) { if(j - k > 1) { tem[0][j] = max(tem[0][j], dp[u][j - k - 2][0] + dp[v][k][0]); tem[1][j] = max(tem[1][j], dp[u][j - k - 2][1] + dp[v][k][0]); } tem[1][j] = max(tem[1][j], dp[u][j - k - 1][0] + dp[v][k][1]); } } for (int j = 0; j <= m; j++) { dp[u][j][0] = max(dp[u][j][0], tem[0][j]); dp[u][j][1] = max(dp[u][j][1], tem[1][j]); } } for (int j = m; j >= 1; j--){ dp[u][j][0] = max(dp[u][j][0], dp[u][j - 1][0] + a[u]); dp[u][j][1] = max(dp[u][j][1], dp[u][j - 1][1] + a[u]); } } int main() { init(); cin >> n >> m; for(int i = 1; i <= n; i++) { cin >> a[i]; } for(int i = 1; i < n; i++) { int u,v; cin >> u >> v; adj[u].pb(v); adj[v].pb(u); } dfs(1, 0); int res = 0; for(int i = 1; i <= n; i++) { res = max(res, dp[1][i][1]); } cout << res; }
#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...