Cod sursa(job #390337)

Utilizator andreidragusAndrei Dragus andreidragus Data 3 februarie 2010 15:58:16
Problema Asmax Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 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;

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);

    }

    deque<int> q;

    for (int i = 0; i < n - 1; i++)
	if (e[i].size() == 1)
	    q.push_back(i);

    while (q.size() > 0)
    {
	int cur = q.front();
	q.pop_front();

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

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


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

	}
    }

    int m = 0;

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

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

    return 0;
}