Pagini recente » Cod sursa (job #1756145) | Cod sursa (job #2314141) | Cod sursa (job #1900949) | Cod sursa (job #2407898) | Cod sursa (job #1294665)
using namespace std;
#include<iostream>
#include<stdio.h>
FILE *f,*g;
struct arbore
{
int nod;
arbore *urm;
};
arbore *l[16001],*p;
int n,v[16001],s[16001],j=0;
void parcurg(arbore *a, int trimde,int ajuns)
{
s[ajuns]=1;
while(a)
{
if(s[a->nod]==0) parcurg(l[a->nod],ajuns,a->nod);
a=a->urm;
}
if(v[ajuns]+v[trimde]>v[trimde]&&ajuns!=j)
{v[trimde]=v[trimde]+v[ajuns];}
}
int main()
{
int i=0,m=-9999999;
f=fopen("asmax.in","r");
g=fopen("asmax.out","w");
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
{fscanf(f,"%d",&v[i]);l[i]=NULL;}
while(!feof(f))
{
fscanf(f,"%d %d",&i,&j);
p=new arbore;
p->urm=l[i];
p->nod=j;l[i]=p;
p=new arbore;
p->urm=l[j];
p->nod=i;l[j]=p;
}
for(i=1;i<=n;i++) if(m<v[i]) {m=v[i];j=i;}
parcurg(l[j],j,j);
m=-9999999;
for(i=1;i<=n;i++) if(m<v[i]) m=v[i];
fprintf(g,"%d",m);
}