Pagini recente » Cod sursa (job #2797932) | Cod sursa (job #2677327) | Cod sursa (job #1613070) | Cod sursa (job #2560239) | Cod sursa (job #1854341)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
const int nmax=16000, inf=1e9;
vector <int> g[nmax+1];
bool u[nmax+1];
int v[nmax+1];
int sol=-inf;
int dfs (int x) {
u[x]=1;
int s=v[x];
for (int i=0; i<int(g[x].size()); i++) {
int xn=g[x][i];
if (u[xn]==0) {
s+=dfs(xn);
}
}
if (s>sol) {
sol=s;
}
if (s<0) {
s=0;
}
return s;
}
int main () {
int n;
fin>>n;
for (int i=1; i<=n; i++) {
fin>>v[i];
}
for (int i=1; i<=n-1; i++) {
int x, y;
fin>>x>>y;
g[x].push_back(y);
g[y].push_back(x);
}
dfs(1);
fout<<sol<<"\n";
}