Pagini recente » Cod sursa (job #3282597) | Cod sursa (job #240736) | Cod sursa (job #3127469) | Cod sursa (job #1602667) | Cod sursa (job #1658739)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
const int N = 16000;
const int M = N*(N+1)/2;
int n;
int vf[N],lst[M],urm[M],nr;//lista alok dinamic
int v[N];
int viz[N];
int scor[N];
void adauga(int x, int y){
//y in lista lui x
nr++;
vf[nr]= y;
urm[nr]=lst[x];
lst[x]=nr;
}
void dfs(int x){
viz[x]=1;
int p,y;
p=lst[x];
while(p!=0){
y=vf[p];
if(!viz[y]){
dfs(y);
if(scor[y] > 0)
scor[x] += scor[y];
}
p=urm[p];
}
scor[x] += v[x];
}
int main()
{
int x,y;
f>>n;
for(int i=1;i<=n;i++)
f>>v[i];
for(int i=1;i<n;i++){
f>>x>>y;
adauga(x,y);
adauga(y,x);
}
dfs(1);
//
// for(int i=1;i<=n;i++){
// g<<scor[i];
// }
int maxim=-1001;
for(int i=1;i<=n;i++){
if(scor[i]>maxim)
maxim=scor[i];
}
g<<maxim;
return 0;
}