Cod sursa(job #390339)

Utilizator andreidragusAndrei Dragus andreidragus Data 3 februarie 2010 16:05:25
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>
#include <iostream>
#include<vector>
#include<algorithm>
#include<map>
#include<deque>

#define ll long long
#define N (20000)

using namespace std;

bool viz[N];
int val[N];
int ans[N];

vector<int> e[N];
int n;

void dfs(int cur)
{
    if (!viz[cur])
    {
	viz[cur] = true;

	int s = 0;
	for (int i = 0; i < e[cur].size(); i++)
	{
	    if (!viz[e[cur][i]])
	    {
		dfs(e[cur][i]);
		s += ans[e[cur][i]];
	    }
	}


	ans[cur] = max(0, max(val[cur], val[cur] + s));

    }
}

int main()
{
    freopen("asmax.in", "r", stdin);
    freopen("asmax.out", "w", stdout);

    cin >> n;

    for (int i = 0; i < n; i++)
    {
	cin >> val[i];
    }

    for (int i = 0; i < n - 1; i++)
    {
	int u, v;
	cin >> u >> v;
	u--;
	v--;
	e[u].push_back(v);
	e[v].push_back(u);

    }

    dfs(0);

    int m = 0;

    for (int i = 0; i < n; i++)
    {
	m = max(m, ans[i]);
    }

    printf("%d\n", m);

    return 0;
}