Cod sursa(job #1001169)

Utilizator NistorSergiuNistor Sergiu NistorSergiu Data 24 septembrie 2013 17:39:52
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<cstdio>
#include<cstdlib>
using namespace std;
int* gf[16001];
int v[16001];
int sm[16001];
bool calc[16001];
void df(int vf, int n)
{
	int i;
	calc[vf]=1;
	sm[vf]=v[vf];
	for(i=1;i<=gf[vf][0];i++)
		if(!calc[gf[vf][i]])
		{
			df(gf[vf][i],n);
			if(sm[gf[vf][i]]>0)
				sm[vf]+=sm[gf[vf][i]];
		}
}

int main()
{
    int n,i,y,x,mx;
    freopen("asmax.in","r",stdin);
    scanf("%d\n",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d ",&v[i]);
        gf[i]=(int*)realloc(gf[i],4);
        gf[i][0]=0;
    }
    for(i=1;i<n;i++)
    {
        scanf("%d %d\n",&x,&y);
        gf[x][0]++;
        gf[x]=(int*)realloc(gf[x],(gf[x][0]+1)*4);
        gf[x][gf[x][0]]=y;
        gf[y][0]++;
        gf[y]=(int*)realloc(gf[y],(gf[y][0]+1)*4);
        gf[y][gf[y][0]]=x;
    }
    fclose(stdin);
    df(1,n);
    mx=sm[1];
    for(i=2;i<=n;i++)
        if(mx<sm[i])
            mx=sm[i];
    freopen("asmax.out","w",stdout);
    printf("%d\n",mx);
    fclose(stdout);
    return 0;
}