/ SeriousOJ /

Record Detail

Wrong Answer


  
# Status Time Cost Memory Cost
#1 Wrong Answer 103ms 119.316 MiB
#2 Wrong Answer 92ms 119.211 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;
int dp[MAXN][MAXK]; // DP table
bool visited[MAXN]; // To track visited nodes

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);

        // Update dp[node] for all lengths up to K
        for (int length = K; length > 0; --length) {
            for (int l = 0; l < length; ++l) {
                dp[node][length] = max(dp[node][length], dp[node][l] + dp[neighbor][length - l - 1]);
            }
        }
    }
}

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:43:57
Judged At
2025-02-17 14:43:57
Judged By
Score
0
Total Time
103ms
Peak Memory
119.316 MiB