Pagini recente » Cod sursa (job #2527281) | Cod sursa (job #2369476) | Cod sursa (job #261980) | Cod sursa (job #899970) | Cod sursa (job #175368)
Cod sursa(job #175368)
#include <fstream.h>
#define N 16100
ifstream fin("asmax.in");
ofstream fout("asmax.out");
struct nod {int info;nod *urm;};
int n,tati[N],radacina,viz[N];
nod *lista[N],*q,*t;
long long s[N],v[N];
void pune(int i1,int i2)
{
nod *p;
p=new nod;
p->info=i1;
if(!lista[i2]){p->urm=0;lista[i2]=p;}
else{p->urm=lista[i2];lista[i2]=p;}
p=new nod;
p->info=i2;
if(!lista[i1]){p->urm=0;lista[i1]=p;}
else{p->urm=lista[i1];lista[i1]=p;}
}
void citire()
{
fin>>n;
int i;
for(i=1;i<=n;i++)
{
fin>>v[i];
viz[i]=0;
}
int a,b;
for(i=1;i<n;i++)
{
fin>>a>>b;
pune(a,b);
}
}
void progdin(int k)
{
nod *p;
p=lista[k];
int indice;
viz[k]=1;
while (p)
{
indice=p->info;
if(!viz[indice])
{
progdin(indice);
if(v[indice]>0)
v[k]+=v[indice];
}
p=p->urm;
}
}
int main()
{
int max,i,j;
nod *p;
citire();
progdin(1);
max=v[1];
for(i=2;i<=n;i++)
if (max<=v[i])
max=v[i];
fout<<max<<'\n';
return 0;
}