Pagini recente » Cod sursa (job #1092830) | Cod sursa (job #357826) | Cod sursa (job #479554) | Cod sursa (job #2205130) | Cod sursa (job #555447)
Cod sursa(job #555447)
#include <fstream>
#define nmax 16005
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n, maxx = -500000;
int uz[nmax], dp[nmax];
struct lista
{
int inf;
lista * nod;
} * g[nmax];
void add(int i, int j)
{
lista * p;
p = new lista;
p -> inf = j;
p -> nod = g[i];
g[i] = p;
}
void dd(int nod)
{
uz[nod] = 1;
lista *p;
for(p = g[nod]; p; p = p->nod)
{
if(!uz[p->inf])
{
dd(p->inf);
if(dp[p->inf] > 0) dp[nod] += dp[p->inf];
}
if(dp[nod] > maxx)
maxx = dp[nod];
}
// fout << "\n";
}
int main()
{
int i, x, y;
fin >> n;
for(i = 1; i <= n; ++ i)
fin >> dp[i];
for(i = 1; i <=n-1 ; ++i)
{
fin >> x >> y;
add(x, y);
add(y, x);
}
dd(1);
fout << maxx << "\n";
return 0;
}