Cod sursa(job #1197556)

Utilizator azkabancont-vechi azkaban Data 12 iunie 2014 17:34:13
Problema Asmax Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#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;
}