Pagini recente » Cod sursa (job #2385507) | Cod sursa (job #3242810) | Cod sursa (job #1736322) | Cod sursa (job #2970429) | Cod sursa (job #1336915)
#include <cstdio>
#include <fstream>
#include <vector>
#define nmax 16005
using namespace std;
FILE *f=fopen("asmax.in","r");
FILE *g=fopen("asmax.out","w");
int k[nmax],s[nmax];
int q[nmax],viz[nmax],n;
vector <int> v[nmax];
void dfs(int x)
{
for (vector <int> :: iterator it =v[x].begin();it!=v[x].end();it++) {
int y=*it;
if (viz[y]==0) {
viz[y]=1;
dfs(y);
if (s[y]>0) s[x]+=s[y];
}
}
s[x]+=k[x];
}
int main()
{
int i,j,a,b;
fscanf(f,"%d",&n);
for (i=1;i<=n;i++)
fscanf(f,"%d",&k[i]);
for (i=1;i<=n-1;i++) {
fscanf(f,"%d %d",&a,&b);
q[b]=1;
v[a].push_back(b);
v[b].push_back(a);
}
for (i=1;i<=n;i++)
if (q[i]==0) {
viz[i]=1;
dfs(i);
}
int m=-1<<20;
for (i=1;i<=n;i++) m=max(m,s[i]);
fprintf(g,"%d",m);
return 0;
}