Pagini recente » Cod sursa (job #258061) | Cod sursa (job #1370096) | Cod sursa (job #368641) | Cod sursa (job #1583381) | Cod sursa (job #1140782)
#include <fstream>
#include <vector>
using namespace std;
#define NMax 16005
ifstream f("asmax.in");
ofstream g("asmax.out");
int n,val[NMax];
vector<int> v[NMax];
int ordine[NMax],viz[NMax];
int nr=0;
long long sum[NMax];
void DFS(int s)
{
viz[s]=1;
for(int i=0;i<v[s].size();i++) if(!viz[v[s].at(i)]) DFS(v[s].at(i));
ordine[++nr]=s;
}
long long dinamic()
{
int i,j,s;
long long sumx=0;
for(i=1;i<=n;i++)
{
s=ordine[i];
sum[s]=(long long)val[s];
for(j=0;j<v[s].size();j++) if(s<ordine[v[s].at(j)])
if(sum[v[s].at(j)]>0) sum[s]+=sum[v[s].at(j)];
if(sumx<sum[s]) sumx=sum[s];
}
return sumx;
}
int main()
{
int i,a,b;
f>>n;
for(i=1;i<=n;i++) f>>val[i];
for(i=1;i<n;i++)
{
f>>a>>b;
v[a].push_back(b);
v[b].push_back(a);
}
DFS(1);
g<<dinamic()<<"\n";
f.close();
g.close();
return 0;
}