Cod sursa(job #1017296)

Utilizator Athena99Anghel Anca Athena99 Data 27 octombrie 2013 17:08:29
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("asmax.in");
ofstream fout("asmax.out");

const int inf= 1<<30;
const int nmax= 16000;

vector <int> v[nmax+1];
int c[nmax+1], d[nmax+1];
bool u[nmax+1];

void dfs_upd( int p ) {
    u[p]= 1;
    d[p]= c[p];
    for ( int i= 0; i<(int)v[p].size(); ++i ) {
        if ( u[v[p][i]]==0 ) {
            dfs_upd(v[p][i]);
            if ( d[v[p][i]]>0 ) {
                d[p]+= d[v[p][i]];
            }
        }
    }
}

int main(  ) {
    int n;
    fin>>n;
    for ( int i= 1; i<=n; ++i ) {
        fin>>c[i];
    }
    for ( int i= 1; i<n; ++i ) {
        int x, y;
        fin>>x>>y;
        v[x].push_back(y);
        v[y].push_back(x);
    }
    dfs_upd(1);

    int sol= -inf;
    for ( int i= 1; i<=n; ++i ) {
        if ( d[i]>sol ) {
            sol= d[i];
        }
    }
    fout<<sol<<"\n";
    return 0;
}