Cod sursa(job #2050510)

Utilizator maria_sinteaMaria Sintea maria_sintea Data 28 octombrie 2017 10:14:35
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <vector>
#include <cstdio>
#define N 16005
#define max(a,b) a>b?a:b

using namespace std;

int n, x, y, a[N], t[N], din[N], maxi=-9999999;
vector <int> graf[N];

void dfs(int nod)
{
    din[nod]+=a[nod];
    maxi=max(maxi, a[nod]);
    for(int i=0;i<graf[nod].size();i++)
    {
        int v=graf[nod][i];
        if(t[nod]!=v)
        {
            t[v]=nod;
            dfs(v);
            if(din[v]>0)
            {
                din[nod]+=din[v];
                maxi=max(maxi, din[nod]);
            }
        }
    }
}

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

    scanf("%d\n", &n);
    for(int i=1;i<=n;i++)
        scanf("%d ", &a[i]);
    for(int i=1;i<=n-1;i++)
    {
        scanf("%d %d\n", &x, &y);
        graf[x].push_back(y);
        graf[y].push_back(x);
    }

    dfs(1);
    printf("%d ", maxi);
    return 0;
}