Pagini recente » Cod sursa (job #1793323) | Cod sursa (job #1355204) | Cod sursa (job #64614) | Cod sursa (job #851787) | Cod sursa (job #2461774)
#include <iostream>
#include <cstdio>
using namespace std;
int v[16001], vf[32001], lst[32001], urm[32001];
bool viz[16001];
int nr=0;
void adauga(int x, int y) {
vf[++nr]=y;
urm[nr]=lst[x];
lst[x]=nr;
}
void dfs(int x) {
int y, p;
viz[x]=true;
for(p=lst[x];p!=0;p=urm[p]) {
y=vf[p];
if(!viz[y]) {
dfs(y);
if(v[y]>0)
v[x]+=v[y];
}
}
}
int main() {
FILE *fin, *fout;
int n, i, x, y, s;
fin=fopen("asmax.in","r");
fout=fopen("asmax.out","w");
fscanf(fin, "%d",&n);
for(i=1;i<=n;i++)
fscanf(fin, "%d",&v[i]);
for(i=1;i<n;i++) {
fscanf(fin, "%d%d",&x,&y);
adauga(x,y);
adauga(y,x);
}
for(i=1;i<=n;i++) {
if(!viz[i])
dfs(i);
}
s=v[1];
for(i=2;i<=n;i++)
if(v[i]>s)
s=v[i];
fprintf(fout, "%d\n",s);;
fclose( fin );
fclose( fout );
return 0;
}