Cod sursa(job #1833637)

Utilizator andreigasparoviciAndrei Gasparovici andreigasparovici Data 22 decembrie 2016 20:37:26
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

#define NMAX 16001

vector<int> arb[NMAX];
int n;
int v[NMAX];
int d[NMAX];
int tata[NMAX];

#define pb push_back

void citire()
{
    scanf("%d ",&n);
    for(int i=1;i<=n;i++)
        scanf("%d ",&v[i]);
    for(int i=1;i<n;i++)
    {
        int x,y;
        scanf("%d %d ",&x,&y);
        arb[x].pb(y);
        arb[y].pb(x);
    }
}
bool viz[NMAX];

void dfs(int start)
{
    viz[start]=1;
    d[start]=v[start];
    for(vector<int>::iterator it=arb[start].begin();it!=arb[start].end();it++)
    {
        if(!viz[*it])
        {
            dfs(*it);
            if(d[*it]>0)
                d[start]+=d[*it];
        }
    }
}

int main()
{
    freopen("asmax.in","r",stdin);
    freopen("asmax.out","w",stdout);

    citire();
    dfs(1);
    printf("%d\n",*max_element(d,d+n+1));
    return 0;
}