Cod sursa(job #570069)

Utilizator mihai_floreaFlorea Mihai Alexandru mihai_florea Data 2 aprilie 2011 14:02:14
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <vector>
#include <fstream>
using namespace std;

const int NMAX = 16061;

#define pb push_back

int N, Val[NMAX], din[NMAX];
vector<int> G[NMAX];
bool u[NMAX];

int ans = -16000001;

void DF(int x)
{
     u[x]=true;
     din[x]=Val[x];
     for (vector<int>::iterator it=G[x].begin(); it!=G[x].end(); ++it)
         if (!u[*it])
         {
            DF(*it);
            if (din[*it] > 0) din[x]+=din[*it];
         }
     ans=max(ans, din[x]);
}

int main()
{
    ifstream fin("asmax.in");
    ofstream fout("asmax.out");
    fin>>N;
    for (int i=1;i<=N;++i) fin>>Val[i];
    for (int i=1;i<N;++i)
    {
        int x, y;
        fin>>x>>y;
        G[x].pb(y);
        G[y].pb(x);
    }
    
    DF(1);
    
    fout<<ans<<"\n";
    
    fin.close(); fout.close();
    
    return 0;
}