Cod sursa(job #3308880)

Utilizator Eric.mEric Mestereaga Eric.m Data 29 august 2025 11:22:10
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>
#define NMAX 16002
#define INF 20000000

using namespace std;

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

int N,ans=-INF;
int cost[NMAX];
vector <int> G[NMAX];
vector <bool> vis;
vector <int> S;
int T[NMAX],dp[NMAX];

void dfs(int node,vector <int> *G,vector <bool> &vis,int *T,vector <int> &S)
{
    vis[node]=1;
    for(int x:G[node]){
        if(!vis[x]){
            T[x]=node;
            dfs(x,G,vis,T,S);
        }
    }
    S.push_back(node);
    return;
}

int main()
{
    fin >> N;
    vis.resize(N+2);
    for(int i=1;i<=N;i++){
        fin >> cost[i];
    }
    for(int i=1;i<N;i++){
        int x,y;
        fin >> x >> y;
        G[x].push_back(y);
        G[y].push_back(x);
    }
    T[1]=-1;
    dfs(1,G,vis,T,S);
//    reverse(S.begin(),S.end());
    for(int x:S){
//        cout << x << " ";
        dp[x]+=cost[x];
        ans = max(ans,dp[x]);
        dp[T[x]]+=max(dp[x],0);
    }
//    cout << "\n";
    fout << ans;
}