Cod sursa(job #2500697)

Utilizator georgecristian2002Raducanu George-Cristian georgecristian2002 Data 28 noiembrie 2019 15:44:27
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<iostream>
#include<fstream>

using namespace std;

ifstream fin("asmax.in");
ofstream fout("asmax.out");


const int N = 16001, INF = 1000001;
int vf[2 * N], urm[2 * N], lst[N], v[N], n, nr, smax = -INF;  // nr = pozitia curenta
bool viz[N];

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

int dfs(int x) {

	viz[x] = true;
	int p = lst[x], y, d, s = v[x];
	while (p != 0) {
		y = vf[p];
		if (!viz[y]) if ((d = dfs(y)) >= 0) s += d;
		p = urm[p];
	}
	if (s > smax) smax = s;
	return s;

}
int main()
{
    int n;
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        fin>>v[i];
    }
    for(int i=1;i<=n-1;i++)
    {
        int x,y;
        fin>>x>>y;
        adauga(x,y);
        adauga(y,x);
    }
    dfs(1);
    fout<<smax;
    fin.close();
    fout.close();
    return 0;
}