Pagini recente » Cod sursa (job #2264346) | Cod sursa (job #2734341) | Cod sursa (job #335371) | Cod sursa (job #1300205) | Cod sursa (job #1200596)
#include <fstream>
using namespace std;
typedef struct nod
{
int value;
nod *urm;
} *pnod;
pnod v[16001];
int viz[16001],optim[16001],node[16001],maxim,n;
void addVertex(pnod &dest,int value)
{
pnod p=new nod;
p->value=value;
p->urm=dest;
dest=p;
}
void DFS(int nod,int tatal)
{
viz[nod]=1;
for(pnod p=v[nod];p;p=p->urm)
{
if(viz[p->value]==0)
{
DFS(p->value,nod);
optim[nod]=max(optim[nod],optim[nod]+optim[p->value]);
}
}
}
int main()
{
FILE * fin,*fout;
int 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]=optim[i]=a;
}
for(i=1;i<n;i++)
{
fscanf(fin,"%d %d",&a,&b);
addVertex(v[a],b);
addVertex(v[b],a);
}
DFS(1,-1);
for(i=1;i<=n;i++)
if(optim[i]>maxim) maxim=optim[i];
fprintf(fout,"%d",maxim);
fclose(fin);
fclose(fout);
return 0;
}