Cod sursa(job #1492538)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 27 septembrie 2015 21:04:12
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <cstdio>
#include <vector>

#define NMAX 16007
#define inf -2000000007

using namespace std;
int n, bst[NMAX], maxn = inf, tmp1, tmp2;
vector <int> adj[NMAX];

void dfs(int nod, int tata)
{
    //printf("check %d tata = %d\n", nod, tata);
    int sze = adj[nod].size();
    //printf("nod = %d sze = %d\n", nod, sze);
    for(int i = 0; i< sze; ++i)
    {
        //printf("check1 %d  tata = %d %d\n", nod, tata, adj[nod][i]);
        if(adj[nod][i] == tata) continue;
        //printf("check2 %d  tata = %d %d\n", nod, tata, adj[nod][i]);
        dfs(adj[nod][i], nod);
        if(bst[adj[nod][i]] > 0) bst[nod] += bst[adj[nod][i]];
    }
    if(bst[nod] > maxn) maxn = bst[nod];
}

int main()
{
    freopen("asmax.in", "r", stdin);
    freopen("asmax.out", "w", stdout);
    scanf("%d", &n);
    for(int i = 1; i<= n; ++i) scanf("%d", &bst[i]);
    for(int i = 1; i< n; ++i)
    {
        scanf("%d %d", &tmp1, &tmp2);
        adj[tmp1].push_back(tmp2);
        adj[tmp2].push_back(tmp1);
    }
    dfs(1, -1);
    printf("%d\n", maxn);
    //for(int i = 1; i<= n; ++i) printf("%d ", bst[i]);
    //printf("\n");

    return 0;
}