Pagini recente » Cod sursa (job #1285208) | Cod sursa (job #1075872) | Cod sursa (job #2674009) | Cod sursa (job #2682274) | Cod sursa (job #1322232)
#include <fstream>
#include <list>
using namespace std;
int main()
{
ifstream in("asmax.in");
ofstream out("asmax.out");
long n, aux1, aux2, x1, x2;
long *noduri, *coada, maximum;
list<long> *lista;
in>>n;
noduri = new long[n+1];
lista = new list<long>[n+1];
coada = new long[n+1];
for(long i=1; i<=n; ++i) in>>noduri[i];
for(long i=1; i<n; ++i)
{
in>>aux1>>aux2;
lista[aux1].push_back(aux2);
lista[aux2].push_back(aux1);
}
x1=0; x2=-1;
for(long i=1; i<=n; ++i)
{
if(lista[i].size()==1)
{
++x2;
coada[x2]=i;
}
}
maximum=-1001;
while(x1<=x2)
{
if(noduri[coada[x1]]>maximum) maximum=noduri[coada[x1]];
if(noduri[coada[x1]]<0) noduri[coada[x1]]=0;
if(!lista[coada[x1]].empty())
{
aux1=*(lista[coada[x1]].begin());
noduri[aux1]+=noduri[coada[x1]];
lista[aux1].remove(coada[x1]);
if(lista[aux1].size()==1)
{
++x2;
coada[x2]=aux1;
}
}
++x1;
}
out<<maximum;
in.close(); out.close();
return 0;
}