Cod sursa(job #3365817)

Utilizator adimiclaus15Miclaus Adrian Stefan adimiclaus15 Data 25 septembrie 2026 19:15:31
Problema Asmax Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.66 kb
// Source: https://usaco.guide/general/io

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

const int NMAX = 16000;
vector<int> G[NMAX + 1];
int vis[NMAX + 1];
int dp[NMAX + 1], v[NMAX + 1];
vector<int> L[NMAX + 1];

void dfs(int node) {
    vis[node] = 1;
    for(auto vec : G[node]) {
        if(!vis[vec]) {
            dfs(vec);
            if(dp[vec] > 0) {
                dp[node] += dp[vec];
            }
        }
    }
}

// void dfs(int node) {
//     vis[node] = 1;
//     vector<int> fii;
//     for(auto vec : G[node]) {
//         if(!vis[vec]) {
//             fii.push_back(vec);
//             dfs(vec);
//         }
//     }
//     for(auto x : fii) {
//         if(dp[x] > 0) {
//             dp[node] += dp[x];
//         }
//     }
// }

// void dfs(int node, int nivel) {
//     vis[node] = nivel;
//     for(auto vec : G[node]) {
//         if(!vis[vec]) {
//             dfs(vec, nivel + 1);
//         }
//     }
// }

int main() {
    ifstream cin("asmax.in");
    ofstream cout("asmax.out");
	int n;
    cin >> n;
    for(int i = 1; i <= n; i++) {
        cin >> v[i];
        dp[i] = v[i];
    }
    for(int i = 1; i < n; i++) {
        int x, y;
        cin >> x >> y;
        G[x].push_back(y);
        G[y].push_back(x);
    }
    dfs(1);
    // for(int i = 1; i <= n; i++) {
    //     L[vis[i]].push_back(i);
    // }
    // for(int i = n; i >= 1; i--) {
    //     for(auto x : L[i]) {
    //         for(auto y : G[x]) {
    //             if(dp[y] > 0) {
    //                 dp[x] += dp[y];
    //             }
    //         }
    //     }
    // }
    int sol = 0;
    for(int i = 1; i <= n; i++) {
        sol = max(sol, dp[i]);
    }
    cout << sol;
}