Cod sursa(job #1148952)

Utilizator turbowin120Amarandei-Stanescu Alexandru turbowin120 Data 21 martie 2014 12:45:44
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>
using namespace std;

int vf[200001], nr=0, urm[200001], lst[200001],v[16001],aux,summax=-1000999;
bool viz[100011];
inline void adauga(int x, int y)
{
    ++nr;
    vf[nr]=y;
    urm[nr]=lst[x];
    lst[x]=nr;
}

void dfs(int x)
{
    viz[x]=true;
    int y,p;
    p=lst[x];
    while (p!=0)
    {
        y=vf[p];
        if(!viz[y])
        {
            dfs(y);
            if (v[y] > 0)
                v[x] += v[y];
        }
        p=urm[p];
    }
}
int main()
{
    int n,m,x,y;
    FILE * in, *out;
    in=fopen ("asmax.in","r");
    out=fopen ("asmax.out","w");

    fscanf(in,"%d",&m);

    for(int i=1;i<=m;i++)
    {
        fscanf(in,"%d" , &v[i]);
    }


    for(int i=1;i<m;i++)
    {
        fscanf(in,"%d%d",&x,&y);
        adauga(x,y);
        adauga(y,x);
    }

    dfs(1);

    for(int i=1;i<=m;i++)
    {
        if(v[i]>=summax) summax=v[i];
    }

    fprintf(out,"%d",summax);

    return 0;
}