Cod sursa(job #1442936)

Utilizator turbowin120Amarandei-Stanescu Alexandru turbowin120 Data 26 mai 2015 16:08:24
Problema Asmax Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 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=-18000000;
    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);
        adauga(b,a);
       ver[b]=1;
    }
    for(int i=1;i<=n;i++) {if(ver[i]==0) rad=i; ver[i]=1;}
}

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

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