Pagini recente » Cod sursa (job #1077740) | Cod sursa (job #1651156) | Cod sursa (job #1618148) | Cod sursa (job #1402641) | Cod sursa (job #2010278)
#include <fstream>
#include <vector>
#define DIM 16001
#define INF 2000000000
using namespace std;
ifstream fi("asmax.in");
ofstream fo("asmax.out");
int n;
int A[DIM],C[DIM];
vector<int> V[DIM];
int VIZ[DIM];
bool ok;
int mx=-INF;
void dfs(int v)
{
VIZ[v]=1;
A[v]=C[v];
for(int i=0;i<V[v].size();i++)
if(!VIZ[V[v][i]])
{
dfs(V[v][i]);
if(A[V[v][i]]>0)
A[v]+=A[V[v][i]];
}
}
int main()
{
fi>>n;
for(int i=1;i<=n;i++)
{
fi>>C[i];
if(C[i]>0)
ok=true;
mx=max(mx,C[i]);
}
for(int i=1;i<n;i++)
{
int a,b;
fi>>a>>b;
V[a].push_back(b);
V[b].push_back(a);
}
for(int i=1;i<=n;i++)
A[i]=-INF;
if(ok)
{
dfs(1);
mx=-INF;
for(int i=1;i<=n;i++)
mx=max(mx,A[i]);
}
fo<<mx;
fi.close();
fo.close();
return 0;
}