Pagini recente » Cod sursa (job #1853689) | Cod sursa (job #1905313) | Cod sursa (job #1592401) | Cod sursa (job #468487) | Cod sursa (job #1013362)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f ("asmax.in");
ofstream g ("asmax.out");
int n;
int valoare[16001], solutie[16001];
char vizitat[16001];
vector <int> graf[16001];
void citeste ()
{
int a, b;
f>>n;
for (int i=1; i<=n; i++) f>>valoare[i];
for (int i=1; i<n; i++)
{
f>>a>>b;
graf[a].push_back (b);
graf[b].push_back (a);
}
}
void parcurge (int nod)
{
solutie[nod]=valoare[nod];
vizitat[nod]=1;
int k; k=graf[nod].size ();
for (int i=0; i<k; i++)
{
if (!vizitat[graf[nod][i]])
{
parcurge (graf[nod][i]);
if (solutie [graf[nod][i]]>0) solutie[nod]+=solutie[graf[nod][i]];
}
}
}
void sol()
{
int rezultat=solutie[1];
for (int i=2; i<=n; i++) if (solutie[i]>rezultat) rezultat=solutie[i];
g<<rezultat<<'\n';
}
int main ()
{
citeste ();
parcurge (1);
sol ();
return 0;
}