Cod sursa(job #2500709)

Utilizator tomitza.1604Sacuiu TomaAndrei tomitza.1604 Data 28 noiembrie 2019 15:52:23
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <iostream>
#include <fstream>
using namespace std;

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

const int N = 16001, INF = 1000001;
int vf[2*N], urm[2*N], lst[N], n, nr, smax = -INF, v[N];
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 x, y;
    in >> n;
    for (int i = 1 ; i <= n ; i++){
        in >> v[i];
    }
    for (int i = 1 ; i <= n - 1; i++) {
        in >> x >> y;
        adauga(x, y);
        adauga(y, x);
    }
    dfs(1);
    out << smax;
    return 0;
}