Pagini recente » Istoria paginii utilizator/yuri_titus | Cod sursa (job #1851649) | Monitorul de evaluare | Istoria paginii runda/eusebiu_oji_2003_cls10 | Cod sursa (job #2309675)
#include <bits/stdc++.h>
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
vector<int> V[16002];
int D[16002],W[16002];
int mx=INT_MIN;
bool M[16002];
void cost(int node)
{
M[node]=1,D[node]=W[node];
for(int i=0;i<V[node].size();i++)
{
int x=V[node][i];
if(M[x]==0)
{
cost(x);
if(D[x]>0) D[node]+=D[x];
}
}
mx=max(mx,D[node]);
}
int main()
{
int N; f>>N;
for(int i=1;i<=N;f>>W[i++]);
for(int i=1;i<N;i++)
{
int x,y; f>>x>>y;
V[x].push_back(y);
V[y].push_back(x);
}
cost(1);
g<<mx<<" ";
return 0;
}