Cod sursa(job #3337494)

Utilizator Mihai09Mihai Arteni Mihai09 Data 28 ianuarie 2026 09:24:55
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,v[16010],dp[16010];
list<int>son[16010],nbr[16010];
bool visited[16010];

void tree(int x)
{
    visited[x] = 1;
    for(int s:nbr[x])
    {
        if(!visited[s])
        {
            tree(s);
            son[x].push_back(s);
        }
    }
}

void rec(int x)
{
    if(son[x].empty())
    {
        dp[x] = v[x];
    }
    else
    {
        dp[x] = v[x];
        for(int s:son[x])
        {
            rec(s);
            if(dp[s] > 0)
            {
                dp[x]+=dp[s];
            }
        }
    }
}

int main()
{
    fin >>n;
    for(int i = 1;i <= n;i++)
    {
        fin >>v[i];
    }
    for(int i = 1;i <= n-1;i++)
    {
        int a,b;
        fin >>a >>b;
        nbr[a].push_back(b);
        nbr[b].push_back(a);
    }
    tree(1);
    rec(1);
    int ans = -1001;
    for(int i = 1;i <= n;i++)
    {
        ans = max(ans,dp[i]);
    }
    fout <<ans;
    return 0;
}