Pagini recente » Cod sursa (job #596620) | Cod sursa (job #3173674) | Cod sursa (job #113394) | Cod sursa (job #3247352) | Cod sursa (job #130802)
Cod sursa(job #130802)
#include <cstdio>
#include <vector>
using namespace std;
#define MAXN 16384
int N;
short int V[MAXN]
int P[MAXN];
vector <short int> L[MAXN];
void read_data()
{
scanf("%d", &N);
for(int i=1; i<=N; ++i)
scanf("%hd", &V[i]);
for(int i=0; i<N-1; ++i)
{
int u, v;
scanf("%d %d", &u, &v);
L[u].push_back(v);
L[v].push_back(u);
}
}
void DF(int v, int father)
{
for(size_t i=0; i<L[v].size(); ++i)
if(L[v][i]!=father)
DF(L[v][i], v);
P[v]=V[v];
for(size_t i=0; i<L[v].size(); ++i)
if(L[v][i]!=father && P[L[v][i]]>0)
P[v]+=P[L[v][i]];
}
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
read_data();
DF(1, 0);
int poz=1;
for(int i=2; i<=N; ++i)
if(P[i] > P[poz])
poz=i;
printf("%d\n", P[poz]);
return 0;
}