Pagini recente » Cod sursa (job #2301508) | Cod sursa (job #1405190) | Cod sursa (job #1029870) | Cod sursa (job #1164790) | Cod sursa (job #935437)
Cod sursa(job #935437)
#include <stdio.h>
#include <vector>
using namespace std;
#define FIN "asmax.in"
#define FOUT "asmax.out"
#define nmax 16100
#define FOR(i,a,b) for(i= (a); i<(b); ++i)
vector<int> a[nmax];
int c[nmax], v[nmax], MAX=-(1<<20), NEG;
int s[nmax], n;
void DF(int nod)
{
int i;
// printf("intru in DF la %d cu costul %d\n",nod,c[nod]);
v[nod]=1;
FOR(i,0,a[nod].size())
if(v[a[nod][i]]==0)
{
DF(a[nod][i]);
if( s[a[nod][i]] > 0)
s[nod] += s[a[nod][i]];
}
s[nod] += c[nod];
if( s[nod] > MAX)
MAX = s[nod];
if( c[nod] > MAX)
MAX = c[nod];
// printf("suma la %d este %d\n",nod,s[nod]);
}
int main()
{
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
int i,x,y;
scanf("%d\n", &n);
++n;
FOR(i,1,n)
scanf("%d", &c[i]);
--n;
FOR(i,1,n)
{
scanf("%d%d", &x,&y);
a[x].push_back(y);
a[y].push_back(x);
}
DF(1);
printf("%d\n", MAX);
return 0;
}