Pagini recente » Cod sursa (job #2703403) | Cod sursa (job #1590805) | Cod sursa (job #1597038) | Cod sursa (job #1315030) | Cod sursa (job #1303930)
#include<iostream>
using namespace std;
#include<stdio.h>
FILE *f,*g;
int suma=-9999999999,n,i,j,val[16002],s[16002],m,n1;
struct nod
{
int nd;
nod *urm;
};
nod *l[16002],*p;
int df(int q,int w)
{
s[q]=1;
while(l[q])
{
if(s[l[q]->nd]==0)
{
df(l[q]->nd,q);
}
l[q]=l[q]->urm;
}
if(w!=q)
{
if(val[w]<0&&val[q]>0&&val[w]+val[q]>=0)
val[w]=val[q]+val[w];
else
if(val[w]+val[q]>0)
val[w]=val[q]+val[w];
}
}
int main()
{
f=fopen("asmax.in","r");
g=fopen("asmax.out","w");
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
{
fscanf(f,"%d",&val[i]);
}
while(!feof(f))
{
fscanf(f,"%d%d",&i,&j);
if(i!=m||j!=n1)
{
p=new nod;
p->urm=l[i];
p->nd=j;
l[i]=p;
p=new nod;
p->urm=l[j];
p->nd=i;
l[j]=p;
}
m=i;n1=j;
}
m=n;
df(1,1);
for(i=1;i<=n;i++)
if(val[i]>suma)
suma=val[i];
fprintf(g,"%d",suma);
}