제출 #216916

#제출 시각아이디문제언어결과실행 시간메모리
216916quocnguyen1012Dostavljač (COCI18_dostavljac)C++14
140 / 140
193 ms2304 KiB
#include <bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define eb emplace_back using namespace std; typedef long long ll; typedef pair<int, int> ii; const int maxn = 505; vector<int> adj[maxn]; int f[maxn][maxn][2]; int N, M, a[maxn]; void calc(int u, int p = -1) { for(int v : adj[u]) if(v != p){ calc(v, u); for(int i = M; i >= 1; --i){ for(int j = 2; j <= i; ++j){ f[u][i][0] = max(f[u][i][0], f[u][i - j][0] + f[v][j - 2][1]); f[u][i][1] = max(f[u][i][1], f[u][i - j][1] + f[v][j - 2][1]); } for(int j = 1; j <= i; ++j){ f[u][i][0] = max(f[u][i][0], f[u][i - j][1] + f[v][j - 1][0]); } } } for(int i = M; i >= 1; --i){ f[u][i][0] = max(f[u][i][0], f[u][i - 1][0] + a[u]); f[u][i][1] = max(f[u][i][1], f[u][i - 1][1] + a[u]); } } signed main(void) { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #ifdef LOCAL freopen("A.INP", "r", stdin); freopen("A.OUT", "w", stdout); #endif // LOCAL 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].eb(v); adj[v].eb(u); } calc(1); cout << f[1][M][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...
#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...