Pagini recente » Cod sursa (job #2477697) | Cod sursa (job #377221) | Cod sursa (job #2214103) | Cod sursa (job #1584511) | Cod sursa (job #1197570)
#include <fstream>
using namespace std;
ifstream cin("asmax.in");
ofstream cout("asmax.out");
typedef struct celula {
int nod;
celula *next;
} *lista;
void add(long val, lista &p)
{
lista r= new celula;
r->nod=val;
r->next=p;
p=r;
}
void parcurgere(int val,int viz[],int P[],lista lda[],int &maxim)
{
viz[val]=1;
for (lista r=lda[val];r;r=r->next){
if (viz[r->nod]==0) {
parcurgere(r->nod,viz,P,lda,maxim);
P[val]=max(P[val],P[val]+P[r->nod]);
}
maxim=max(maxim,P[val]);
}
}
int n,i,a,b,P[16005],viz[16005],maxim(-99999);
lista lda[16005];
int main ()
{
cin>>n;
memset(lda,0,sizeof(lda));
for (i=1;i<=n;++i) cin>>P[i];
while (cin>>a>>b) {
add(b,lda[a]);
add(a,lda[b]);
}
parcurgere(1,viz,P,lda,maxim);
cout<<maxim<<"\n";
return 0;
}