Pagini recente » Cod sursa (job #808776) | Cod sursa (job #399296) | Cod sursa (job #309783) | Cod sursa (job #2795634) | Cod sursa (job #1670350)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int N = 16005;
int n, nr, x, y, v[N], vf[N*2], urm[N*2], lst[N*2], ct[N*2];
bool viz[N];
void dfs(int x)
{
viz[x] = true;
int p, y;
p = lst[x];
ct[x] = v[x];
while(p != 0)
{
y = vf[p];
if(!viz[y]){
dfs(y);
if(ct[y] > 0)
ct[x] += ct[y];
}
p = urm[p];
}//ct[x]+=v[x];
}
void Adauga(int x, int y)
{
nr++;
vf[nr] = y;
urm[nr] = lst[x];
lst[x] = nr;
}
int main()
{
nr = 0;
in>>n;
for(int i = 1; i <= n; i++)
{
in>>v[i];
}
for(int i = 1; i < n; i++)
{
in>>x>>y;
Adauga(x, y);
Adauga(y, x);
}
dfs(1);
int tp = ct[1], i = 1;
while(i <= n){
if(tp < ct[i])
tp=ct[i];
i++;
}
out<<tp;
return 0;
}