Cod sursa(job #3352553)

Utilizator BeilandArnoldArnold Beiland BeilandArnold Data 28 aprilie 2026 18:38:57
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

void dfs(int v,
         const vector<vector<int>> &adj,
         const vector<int> &val,
         vector<int> &parent,
         vector<int> &dp)
{
    for (int gyerek : adj[v])
        if (gyerek != parent[v]) {
            parent[gyerek] = v;
            dfs(gyerek, adj, val, parent, dp);
        }

        dp[v] = val[v];
    for (int gyerek : adj[v])
        if (gyerek != parent[v] && dp[gyerek] > 0)
            dp[v] += dp[gyerek];
}

int main()
{
    ifstream fin("asmax.in");
    ofstream fout("asmax.out");

    int n;
    fin >> n;

    vector<int> val(n+1, 0);
    for (int i = 1; i <= n; i++)
        fin >> val[i];

    vector<vector<int>> adj(n+1);
    for (int i = 1; i <= n-1; i++) {
        int a,b;
        fin >> a >> b;

        adj[a].push_back(b);
        adj[b].push_back(a);
    }

    vector<int> parent(n+1, -1);
    vector<int> dp(n+1);

    dfs(1, adj, val, parent, dp);

    int sol = dp[1];
    for (int i = 2; i <= n; i++)
        if (dp[i] > sol)
            sol = dp[i];

    fout << sol << endl;
    return 0;
}