Pagini recente » Cod sursa (job #901833) | Cod sursa (job #493324) | Cod sursa (job #1946127) | Cod sursa (job #1627927) | Cod sursa (job #1442656)
#include<fstream>
#include<iostream>
#include<vector>
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
int const NMax = 16005;
vector <int> G[NMax];
int a[NMax], dp[NMax], use[NMax], TT[NMax];
int n;
void citire()
{
int i, x, y;
f>>n;
for(i=1; i<=n; i++)
f>>a[i];
for(i=1; i<n; i++){
f>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
}
void DFS(int nod)
{
int vecin, i;
use[nod] = 1;
dp[nod] = a[nod];
for(i=0; i<G[nod].size(); i++){
vecin = G[nod][i];
if(!use[vecin]){
TT[vecin] = nod;
DFS(vecin);
dp[nod] += dp[vecin];
}
}
}
int rez()
{
int maxi = -1000000000, i, vecin, rad, j;
for(i=2; i<=n; i++){
rad = i;
maxi = max(maxi, dp[1] - dp[rad]);
for(j=0; j<G[rad].size(); j++){
vecin = G[rad][j];
if(vecin == TT[rad])
continue;
maxi = max(maxi, dp[vecin]);
}
}
g<<maxi<<"\n";
}
int main()
{
citire();
DFS(1);
rez();
return 0;
}