Cod sursa(job #2110980)

Utilizator theodor.vladTheodor Vlad theodor.vlad Data 21 ianuarie 2018 15:57:04
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include <vector>

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

void citire();
int dfs(int);
int max(int, int);

int n;
int dp[16005];
bool viz[16005];
vector<vector<int> > M;

int main()
{
	citire();
	dp[0] = dfs(1);
	for (int i = 2; i <= n; i++)
		dp[0] = max(dp[0], dp[i]);
	fout << dp[0] << '\n';
	return 0;
}

int max(int a, int b)
{
	return a > b ? a : b;
}

int dfs(int x)
{
	viz[x] = true;
	for (int i = 1; i <= M[x][0]; i++)
		if (!viz[M[x][i]])
			dp[x] = max(dp[x], dp[x] + dfs(M[x][i]));
	return dp[x];
}

void citire()
{
	fin >> n;
	for (int i = 1; i <= n; i++)
		fin >> dp[i];

	vector<int> aux;
	aux.push_back(0);
	for (int i = 0; i <= n; i++)
		M.push_back(aux);

	int x, y;
	for (int i = 1; i < n; i++)
	{
		fin >> x >> y;
		M[x].push_back(y); M[x][0]++;
		M[y].push_back(x); M[y][0]++;
	}
}