/ SeriousOJ /

Record Detail

Wrong Answer


  
# Status Time Cost Memory Cost
#1 Wrong Answer 94ms 119.273 MiB
#2 Wrong Answer 92ms 119.352 MiB

Code

#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1e5 + 5;
const int MAXK = 305;
int N, K;
vector<int> adj[MAXN];
vector<int> values;

// DP table: dp[node][length] stores the max sum of a path of length `length` ending at `node`
int dp[MAXN][MAXK];

void dfs(int node, int parent) {
    dp[node][0] = values[node]; // Path of length 0 is just the node itself

    for (int neighbor : adj[node]) {
        if (neighbor == parent) continue; // Avoid revisiting parent

        dfs(neighbor, node);

        // Temporary DP array to store updates
        int temp[MAXK] = {0};
        for (int len1 = 0; len1 < K; ++len1) {
            for (int len2 = 0; len1 + len2 + 1 <= K; ++len2) {
                temp[len1 + len2 + 1] = max(temp[len1 + len2 + 1], dp[node][len1] + dp[neighbor][len2]);
            }
        }

        // Copy temp back to dp[node]
        for (int len = 0; len <= K; ++len) {
            dp[node][len] = max(dp[node][len], temp[len]);
        }
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> N >> K;
    values.resize(N + 1);
    for (int i = 1; i <= N; ++i) cin >> values[i];

    for (int i = 1; i < N; ++i) {
        int u, v;
        cin >> u >> v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }

    memset(dp, 0, sizeof(dp));

    dfs(1, -1); // Start DFS from root (node 1)

    int maxWeight = 0;
    for (int i = 1; i <= N; ++i) {
        maxWeight = max(maxWeight, dp[i][K]);
    }

    cout << maxWeight << "\n";
    return 0;
}

Information

Submit By
Type
Submission
Problem
P1160 Max path sum (Easy Version)
Contest
Brain Booster #8
Language
C++17 (G++ 13.2.0)
Submit At
2025-02-17 14:45:02
Judged At
2025-02-17 14:45:02
Judged By
Score
0
Total Time
94ms
Peak Memory
119.352 MiB