Pagini recente » Cod sursa (job #2951423) | Cod sursa (job #914391) | Cod sursa (job #2792071) | Cod sursa (job #2125382) | Cod sursa (job #1199953)
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
ifstream f("asmax.in");
ofstream o("asmax.out");
vector <int> a[20000];
int v[20000],m,n,parc[20000],maxim=-100000000,sus[20000],jos[20000];
void df(int nod){
parc[nod]=1;
jos[nod] = v[nod];
for(int i=0;i<a[nod].size();i++)if(parc[a[nod][i]]!=1){
df(a[nod][i]);
jos[nod]+=jos[a[nod][i]];
}
maxim = max(maxim,jos[nod]);
parc[nod]=0;
}
void df1(int nod){
parc[nod]=1;
for(int i=0;i<a[nod].size();i++)
if(parc[a[nod][i]]!=1){
sus[a[nod][i]] = sus[nod] + jos[nod] - jos[a[nod][i]] + v[a[nod][i]];
maxim = max(maxim,sus[a[nod][i]]);
// o<<maxim<<" " <<a[nod][i]<<endl;
df1(a[nod][i]);
}
parc[nod]=0;
}
int main(){
f>>n;
for(int i=1;i<=n;i++)f>>v[i],sus[i]=jos[i]=0;
int x,y;
for(int i=1;i<n;i++){
f>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
}
df(1);
df1(1);
o<<maxim;
}