Pagini recente » Cod sursa (job #3254908) | Cod sursa (job #53918) | Cod sursa (job #679867) | Cod sursa (job #2283096) | Cod sursa (job #1841049)
#include <cstdio>
#include <vector>
using namespace std;
int v[16001],f[16001],s[16001];
vector <int> l[16001];
int maxi=-2000000000;
void dfs (int nod){
f[nod]=1;
int sfii = 0;
for (int i=0;i<l[nod].size();i++){
int vecin=l[nod][i];
if (f[vecin]==0){
dfs (vecin);
if (s[vecin] >= 0)
sfii+=s[vecin];
}
}
s[nod]=sfii+v[nod];
maxi=max(maxi, s[nod]);
}
int main()
{
FILE *fin=fopen ("asmax.in","r");
FILE *fout=fopen ("asmax.out","w");
int n,i,a,b;
fscanf (fin,"%d",&n);
for (i=1;i<=n;i++)
fscanf (fin,"%d",&v[i]);
while (fscanf (fin,"%d%d",&a,&b)==2){
l[a].push_back(b);
l[b].push_back(a);
}
dfs (1);
fprintf (fout,"%d",maxi);
return 0;
}