Pagini recente » Cod sursa (job #2193539) | Cod sursa (job #903468) | Cod sursa (job #3167461) | Cod sursa (job #1643931) | Cod sursa (job #1017296)
#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;
}