Pagini recente » Cod sursa (job #2898917) | Cod sursa (job #3031892) | Cod sursa (job #2702860) | Cod sursa (job #2611045) | Cod sursa (job #2461104)
#include <iostream>
#include<cstdio>
#include<vector>
using namespace std;
const int N=16005;
int v[N];
vector <int> gr[N];
int d[N];
bool viz[N];
void dfs(int nod){
viz[nod]=true;
int sum=0;
for(auto x:gr[nod]){
if(!viz[x]){
dfs(x);
if(d[x]>=0)
sum+=d[x];
}
}
d[nod]=sum+v[nod];
}
int main()
{
int n;
FILE*fin,*fout;
fin=fopen("asmax.in","r");
fout=fopen("asmax.out","w");
fscanf(fin,"%d",&n);
for(int i=1;i<=n;i++){
fscanf(fin,"%d",&v[i]);
}
for(int i=1;i<n;i++){
int x,y;
fscanf(fin,"%d%d",&x,&y);
gr[x].push_back(y);
gr[y].push_back(x);
}
dfs(1);
int maxi=d[1];
for(int i=2;i<=n;i++)
maxi=max(maxi,d[i]);
fprintf(fout,"%d",maxi);
return 0;
}