Pagini recente » Cod sursa (job #1055904) | Cod sursa (job #655726) | Cod sursa (job #1741868) | Cod sursa (job #96854) | Cod sursa (job #2566426)
#include <iostream>
#include <vector>
#include <fstream>
#include <algorithm>
#include <math.h>
using namespace std;
ifstream fin ("asmax.in");
ofstream fout ("asmax.out");
const int Nlim = 16001;
int N,x,y,k;
vector <int> muchii[Nlim];
int valori[Nlim];
int sum = 0;
int bestsum = -1001;
int val;
int vizitat[Nlim];
void dfs(int nod)
{
vizitat[nod] = 1;
for (unsigned int i = 0 ;i < muchii[nod].size() ;i++)
{
int vecin = muchii[nod][i];
if (!vizitat[vecin])
{
dfs(vecin);
sum += valori[i];
if (sum < 0)
sum = 0;
else if (sum > bestsum)
bestsum = sum;
}
}
}
void readandsol()
{
fin >> N;
for (int i = 1 ;i <= N ;i++)
fin >> valori[k++];
for (int i = 1 ;i < N ;i++)
{
fin >> x >> y;
muchii[x].push_back(y);
muchii[y].push_back(x);
}
dfs(1);//e arbore pot lua direct cu 1
fout << sum;
}
int main()
{
readandsol();
}