Cod sursa(job #2023487)

Utilizator Andrei2000Andrei Mihailescu Andrei2000 Data 18 septembrie 2017 23:19:13
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <bits/stdc++.h>
#define nmax 16001

using namespace std;

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

vector<int>G[nmax];
int n,V[nmax],v[nmax],D[nmax],maxi=INT_MIN;

void dfs(int nod){
    int s=0;
    v[nod]=1;
    for(vector<int>::iterator it=G[nod].begin();it!=G[nod].end();++it)
        if(!v[*it]){
            dfs(*it);
            s+=(D[*it]>=0?D[*it]:0);
        }
    D[nod]=max(V[nod],V[nod]+s);
}

int main()
{
    int a,b;
    fin>>n;
    for(int i=1;i<=n;++i)fin>>V[i];
    for(int i=1;i<n;++i){
        fin>>a>>b;
        G[a].push_back(b);
        G[b].push_back(a);
    }
    memset(v,0,sizeof(v));
    dfs(1);
    for(int i=1;i<=n;++i)
        maxi=max(maxi,D[i]);
    fout<<maxi<<endl;
    return 0;
}