Submission #554712

#TimeUsernameProblemLanguageResultExecution timeMemory
554712Yazan_AlattarDostavljač (COCI18_dostavljac)C++14
140 / 140
283 ms4352 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; #define F first #define S second #define pb push_back #define endl "\n" #define all(x) x.begin(), x.end() const int M = 2007; const ll inf = 2e9; const ll mod = 1e9 + 7; const double pi = acos(-1); const double eps = 1e-6; const int dx[] = {0, -1, 0, 1}, dy[] = {1, 0, -1, 0}; const int block = 320; vector <int> adj[M]; ll n, m, dp[M][M][2], ans; void dfs(int node, int p){ for(auto i : adj[node]) if(i != p){ dfs(i, node); for(int j = m; j; --j) for(int k = 0; k < j; ++k){ if(k + 1 < j) dp[node][j][0] = max(dp[node][j][0], dp[node][j - k - 2][0] + dp[i][k][0]); if(k + 1 < j) dp[node][j][1] = max(dp[node][j][1], dp[node][j - k - 2][1] + dp[i][k][0]); dp[node][j][1] = max(dp[node][j][1], dp[node][j - k - 1][0] + dp[i][k][1]); } } return; } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; for(int i = 1; i <= n; ++i) cin >> dp[i][1][0], dp[i][1][1] = dp[i][1][0]; for(int i = 1; i < n; ++i){ int a, b; cin >> a >> b; adj[a].pb(b); adj[b].pb(a); } dfs(1, 0); for(int i = 1; i <= m; ++i) for(int j = 0; j < 2; ++j) ans = max(ans, dp[1][i][j]); cout << ans << endl; 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...
#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...