Pagini recente » Cod sursa (job #2275383) | Cod sursa (job #374354) | Cod sursa (job #1075742) | Cod sursa (job #2040782) | Cod sursa (job #1197556)
#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[100000],viz[100000],maxim(-999999999);
lista lda[100000];
int main ()
{
cin>>n;
for (i=1;i<=n;++i) cin>>P[i];
while (cin>>a>>b) add(b,lda[a]);
for (i=1;i<=n;++i)
if (viz[i]==0) parcurgere(i,viz,P,lda,maxim);
cout<<maxim<<"\n";
return 0;
}