Pagini recente » Istoria paginii utilizator/cn_dobreanu_ionita | Istoria paginii runda/simulare_oji_11_12_4 | Istoria paginii runda/simulare_oji_dinamica/clasament | Istoria paginii runda/6d_seb_sapatamanaaltfel/clasament | Cod sursa (job #317364)
Cod sursa(job #317364)
#include<cstdio>
#include<vector>
using namespace std;
#define MAX_N 16004
vector<int>G[MAX_N];
int V[MAX_N];
int bst[MAX_N], sol;
bool viz[MAX_N];
void dfs(int x)
{
if(viz[x]) return;
viz[x] = 1;
bst[x] = V[x];
unsigned i;
for(i=0;i<G[x].size();++i)
{
if(!viz[G[x][i]])
{
dfs(G[x][i]);
if(bst[G[x][i]] > 0 ) bst[x] += bst[G[x][i]];
}
}
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
int N;
scanf("%d",&N);
int x,y,i;
for(i=1;i<=N;++i) scanf("%d",&V[i]);
for(i=1;i<N;++i){scanf("%d%d",&x,&y); G[x].push_back(y); G[y].push_back(x); }
dfs(1);
sol = bst[1];
for(i=2;i<=N;++i) if(sol < bst[i]) sol = bst[i];
printf("%d\n",sol);
return 0;
}