Cod sursa(job #1113947)

Utilizator taigi100Cazacu Robert taigi100 Data 21 februarie 2014 08:42:16
Problema Asmax Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<stdio.h>
#include<list>

#define MaxN 16005

using namespace std;

int v[MaxN],n;
list<int> G[MaxN];
int maxV= -20000;
bool viz[MaxN];

void DF(int node)
{
    if(G[node].size() == 0)
    {
       if(v[node]>maxV) maxV = v[node];
       viz[node] = 1;
       return;
    }

    for(list<int>::iterator it=G[node].begin(); it!=G[node].end(); it++)
    {
        if(!viz[*it])
           DF(*it);
       if(v[*it]>0)
        v[node]+=v[*it];
    }

    viz[node]=1;

    if(v[node]>maxV)
      maxV = v[node];
}

int main()
{
    freopen("asmax.in","r",stdin);
    freopen("asmax.out","w",stdout);

    scanf("%d",&n);
    for(int i=1; i<=n; i++)
    {
       scanf("%d",&v[i]);
    }
    int x,y;
    while(1)
    {
        if(feof(stdin))
          break;
        scanf("%d%d",&x,&y);
        G[x].push_back(y);
    }
    for(int i=1;i<=n;i++)
    {
        if(!viz[i])
          DF(i);
    }
    for(int i=1;i<=n;i++)
     printf("%d ",v[i]);
     printf("\n");

    printf("%d",maxV);
}