Cod sursa(job #2522053)

Utilizator eusebiu_alexandruMorar Eusebiu eusebiu_alexandru Data 11 ianuarie 2020 21:57:03
Problema Asmax Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<fstream>
#define nmax 16007
#define inf -5000
using namespace std;

ifstream f("asmax.in");
ofstream g("asmax.out");
int star[nmax],t[3][nmax],d[nmax],i,j,v[nmax],n,k,ti,stiva[nmax],varf=1,coloana,element,vecin,ok,afisat=inf;
bool fr[nmax];
int  main()
{
 f>>n;
 for(i=1;i<=n;i++)
     f>>v[i],d[i]=inf;
 for(ti=1;ti<=n-1;ti++)
 {
     f>>i>>j;
     k++;
     t[0][k]=j;
     t[1][k]=star[i];
     star[i]=k;
     k++;
     t[0][k]=i;
     t[1][k]=star[j];
     star[j]=k;
 }
 stiva[1]=1;
 fr[1]=1;
 while(varf)
 {
    element=stiva[varf];
    coloana=star[element];
    ok=0;
    while(coloana && ok==0)
    {
        vecin=t[0][coloana];
        if(fr[vecin]==0)
        {
            fr[vecin]=1,ok=1,stiva[++varf]=vecin;
        }
        coloana=t[1][coloana];
    }
    if(ok==0)
    {
        coloana=star[stiva[varf]];
         d[stiva[varf]]=v[stiva[varf]];
        while(coloana)
        {
            vecin=t[0][coloana];
            if(d[vecin]!=inf && d[vecin]>0)
                d[stiva[varf]]+=d[vecin];
          coloana=t[1][coloana];
        }
        afisat=max(afisat,d[stiva[varf]]);
      varf--;
    }
 }
 g<<afisat;
}