Pagini recente » Cod sursa (job #1916918) | Cod sursa (job #1324047) | Cod sursa (job #2483590) | Cod sursa (job #933181) | Cod sursa (job #1502330)
#include <fstream>
#include <vector>
using namespace std;
const int LIM=16001;
ifstream cin("asmax.in");
ofstream cout("asmax.out");
int n, val[LIM], dp[LIM], sol=-(1<<30);
vector <int> arb[LIM];
char viz[LIM];
void dfs(int nod)
{
viz[nod]=1;
dp[nod]=val[nod];
for(int i=0; i<arb[nod].size(); ++i)
if(!viz[ arb[nod][i] ])
{
dfs(arb[nod][i]);
if(dp[ arb[nod][i] ]>0) dp[nod]+=dp[ arb[nod][i] ];
}
if(dp[nod]<val[nod]) dp[nod]=val[nod];
if(sol<dp[nod]) sol=dp[nod];
}
int main()
{
cin>>n;
for(int i=1; i<=n; ++i)
cin>>val[i];
for(int i=1; i<n; ++i)
{
int x, y;
cin>>x>>y;
arb[x].push_back(y);
arb[y].push_back(x);
}
dfs(1);
cout<<sol;
return 0;
}