Pagini recente » Atasamentele paginii Profil Blossomse50b | Diferente pentru utilizator/russian intre reviziile 2 si 3 | Diferente pentru documentatie/conventii-de-formatare intre reviziile 26 si 30 | Diferente pentru contact intre reviziile 3 si 4 | Cod sursa (job #1920748)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
vector <int> v[16001];
int n,viz[16001];
long long val[16001],sum[16001],smax;
void dfs(int nod)
{
viz[nod]=1;
sum[nod]=val[nod];
for(int i=0;i<v[nod].size();i++){
int y=v[nod][i];
if(viz[y]==0){
dfs(y);
if(sum[y]>0)
sum[nod]+=sum[y];
}
}
if(sum[nod]>smax)
smax=sum[nod];
}
int main()
{
f>>n;
for(int i=1;i<=n;i++)
f>>val[i];
int a,b;
for(int i=1;i<n;i++){
f>>a>>b;
v[a].push_back(b);
v[b].push_back(a);
}
dfs(1);
g<<smax;
return 0;
}