Pagini recente » Cod sursa (job #1269025) | Cod sursa (job #1089545) | Cod sursa (job #2714731) | Cod sursa (job #2951643) | Cod sursa (job #2110980)
#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]++;
}
}