/ SeriousOJ /

Record Detail

Wrong Answer


  
# Status Time Cost Memory Cost
#1 Accepted 3ms 2.82 MiB
#2 Wrong Answer 3ms 3.027 MiB
#3 Accepted 4ms 2.777 MiB
#4 Accepted 2ms 2.789 MiB
#5 Accepted 3ms 2.82 MiB
#6 Accepted 3ms 3.297 MiB
#7 Accepted 3ms 2.777 MiB
#8 Accepted 5ms 2.848 MiB
#9 Accepted 3ms 3.027 MiB
#10 Accepted 3ms 3.027 MiB
#11 Accepted 3ms 2.777 MiB
#12 Accepted 48ms 6.145 MiB
#13 Accepted 68ms 6.301 MiB
#14 Accepted 65ms 6.406 MiB
#15 Accepted 63ms 6.27 MiB
#16 Accepted 54ms 6.246 MiB
#17 Accepted 51ms 6.27 MiB
#18 Accepted 50ms 6.113 MiB
#19 Accepted 59ms 6.27 MiB
#20 Accepted 48ms 6.07 MiB
#21 Accepted 47ms 6.223 MiB
#22 Accepted 51ms 6.27 MiB
#23 Accepted 51ms 6.109 MiB
#24 Accepted 56ms 6.066 MiB
#25 Accepted 58ms 6.273 MiB
#26 Accepted 43ms 6.27 MiB
#27 Accepted 67ms 6.133 MiB
#28 Accepted 44ms 6.078 MiB
#29 Accepted 50ms 6.066 MiB
#30 Accepted 62ms 6.332 MiB
#31 Accepted 68ms 6.27 MiB
#32 Accepted 662ms 246.367 MiB
#33 Accepted 453ms 170.02 MiB
#34 Accepted 51ms 6.238 MiB
#35 Accepted 58ms 6.238 MiB
#36 Accepted 48ms 6.219 MiB
#37 Accepted 45ms 6.27 MiB
#38 Accepted 53ms 6.328 MiB
#39 Accepted 44ms 6.062 MiB
#40 Accepted 50ms 6.184 MiB
#41 Accepted 51ms 6.52 MiB
#42 Accepted 75ms 6.52 MiB
#43 Accepted 65ms 6.062 MiB
#44 Accepted 63ms 6.066 MiB
#45 Accepted 67ms 6.27 MiB
#46 Accepted 52ms 6.27 MiB
#47 Accepted 80ms 6.344 MiB
#48 Accepted 64ms 6.273 MiB
#49 Accepted 45ms 6.27 MiB
#50 Accepted 108ms 6.27 MiB

Code

#include <bits/stdc++.h>

using namespace std;

const int N = 1e5 + 5;
int64_t ans, INF = -1e18;
int a[N], n, k;
vector<int> g[N];

vector<int64_t> dfs(int node, int pr = -1) {
  vector<int64_t> dp(k + 1, INF);
  dp[1] = a[node];
  for (auto &son : g[node]) {
    if (son == pr) continue;
    vector<int64_t> cdp = dfs(son, node);
    for (int i = 1; i < k; i++) {
      if (dp[i] != INF && cdp[k - i] != INF) {
        ans = max(ans, dp[i] + cdp[k - i]);
      }
    }
    for (int i = 2; i <= k; i++) {
      if (cdp[i - 1] != INF) {
        dp[i] = max(dp[i], cdp[i - 1] + dp[1]);
      }
    }
  }
  return dp;
}

void solve(int cs) {
  cin >> n >> k;
  for (int i = 1; i <= n; i++)
    cin >> a[i];
  for (int i = 0; i < n - 1; i++) {
    int u, v;
    cin >> u >> v;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  ans = INF;
  dfs(1);
  cout << (ans == INF ? 0 : ans) << "\n";
}

int32_t main() {
  ios::sync_with_stdio(!cin.tie(0));
  int t = 1;
  // cin >> t;
  for (int i = 1; i <= t; ++i) {
    solve(i);
  }
  return 0;
}

Information

Submit By
Type
Submission
Problem
P1160 Max path sum (Easy Version)
Language
C++17 (G++ 13.2.0)
Submit At
2025-02-17 18:11:35
Judged At
2025-02-17 18:11:35
Judged By
Score
98
Total Time
662ms
Peak Memory
246.367 MiB