Cod sursa(job #1442917)

Utilizator turbowin120Amarandei-Stanescu Alexandru turbowin120 Data 26 mai 2015 15:53:17
Problema Asmax Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <stdio.h>
using namespace std;

const int N=16420;
int vf[N], urm[N], lst[N], v[N], sum[N];
int rad, nr, n;
bool ver[N];

void afisare(){
    int smax=-1;
    for(int i=1;i<=n;i++){
        if(smax<sum[i]) smax=sum[i];
    }
    FILE * out;
    out=fopen("asmax.out","w");
    fprintf(out,"%d",smax);
}

void adauga(int x, int y){
    nr++;
    vf[nr]=y;
    urm[nr]=lst[x];
    lst[x]=nr;
}


void citire(){
    FILE * in;
    in=fopen("asmax.in","r");
    fscanf(in,"%d",&n);
    int a,b;
    for(int i=1;i<=n;i++) fscanf(in,"%d",&v[i]);
    for(int i=1;i<n;i++) {
        fscanf(in,"%d%d",&a,&b);
        adauga(a,b);
        ver[b]=1;
    }
    for(int i=1;i<=n;i++) if(ver[i]==0) rad=i;
}

void rez(int x){
    int p, y;
    sum[x]=v[x];
    p=lst[x];
    while(p!=0){
        y=vf[p];
        rez(y);
        if(sum[y]>0)
        sum[x]+=sum[y];
        p=urm[p];
    }
}

int main()
{
    citire();
    rez(rad);
    afisare();
    return 0;
}