Cod sursa(job #1442662)

Utilizator emanuel_rRamneantu Emanuel emanuel_r Data 26 mai 2015 00:10:17
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<fstream>
#include<iostream>
#include<vector>

using namespace std;

ifstream f("asmax.in");
ofstream g("asmax.out");

int const NMax = 16005;
vector <int> G[NMax];
int a[NMax], dp[NMax], use[NMax], TT[NMax];
int n;

void citire()
{
    int i, x, y;
    f>>n;
    for(i=1; i<=n; i++)
        f>>a[i];
    for(i=1; i<n; i++){
        f>>x>>y;
        G[x].push_back(y);
        G[y].push_back(x);
    }
}

void DFS(int nod)
{
    int vecin, i;
    use[nod] = 1;
    dp[nod] = a[nod];

    for(i=0; i<G[nod].size(); i++){
        vecin = G[nod][i];
        if(!use[vecin]){
            DFS(vecin);
            if(dp[vecin] > 0)
                dp[nod] += dp[vecin];
        }
    }
}

void rez()
{
    int maxi, i, vecin, rad, j;

    maxi = dp[1];
    for(i=1; i<=n; i++)
        maxi = max(maxi, dp[i]);

    g<<maxi<<"\n";
}

int main()
{
    citire();
    DFS(1);
    rez();
    return 0;
}