Pagini recente » Adolescent Grigore Moisil 2015 | Diferente pentru tema intre reviziile 102 si 158 | Cod sursa (job #609580) | Statistici Stefanescu Stefan (Stefaan) | Cod sursa (job #1200540)
#include <iostream>
#include <fstream>
using namespace std;
typedef struct nod
{
int value;
nod *urm;
} *pnod;
pnod v[16001];
int viz[16001],node[16001],mi[16001],maxim;
void addVertex(pnod &dest,int value)
{
pnod p=new nod;
p->value=value;
p->urm=dest;
dest=p;
}
void DFS(int nod,int tatal)
{
for(pnod p=v[nod];p;p=p->urm)
{
if(viz[p->value]==0)
{
if(mi[nod]+node[p->value]>mi[p->value])
mi[p->value]=mi[nod]+node[p->value];
viz[p->value]=1;
DFS(p->value,nod);
}
else
if(tatal!=-1)
if(node[nod]+mi[tatal]>mi[tatal])
mi[tatal]=mi[tatal]+node[nod];
}
}
int main()
{
FILE * fin,*fout;
int n,a,b,i;
fin=fopen("asmax.in","r");
fout=fopen("asmax.out","w");
fscanf(fin,"%d",&n);
maxim=-1001;
for(i=1;i<=n;i++)
{
fscanf(fin,"%d",&a);
node[i]=mi[i]=a;
}
for(i=1;i<n;i++)
{
fscanf(fin,"%d %d",&a,&b);
addVertex(v[a],b);
addVertex(v[b],a);
}
for(i=1;i<=n;i++)
if(viz[i]==0)
{
viz[i]=1;
DFS(i,-1);
}
for(i=1;i<=n;i++)
if(mi[i]>maxim) maxim=mi[i];
cout<<maxim;
fclose(fin);
fclose(fout);
return 0;
}