Cod sursa(job #1493457)

Utilizator bogdan10bosBogdan Sitaru bogdan10bos Data 29 septembrie 2015 13:18:24
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>

#define INF ( (1 << 30) - 1 + (1 << 30) )
#define mod 666013

using namespace std;

int n, i, x, y, mx, f[16005], a[16005], dp[16005];
vector <int> v[16005];

void DFS(int nod)
{
    f[nod] = 1;
    dp[nod] = a[nod];

    vector <int> :: iterator it;
    for(it = v[nod].begin(); it != v[nod].end(); it++)
    {
        int nxt = *it;
        if(f[nxt])
            continue;
        DFS(nxt);
        dp[nod] = max(dp[nod], dp[nod] + dp[nxt]);
    }
    if(dp[nod] > mx)
        mx = dp[nod];
}

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

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

    mx = -INF;
    DFS(1);
    printf("%d", mx);

    return 0;
}