Pagini recente » Cod sursa (job #1874117) | Cod sursa (job #1473372) | Cod sursa (job #1272784) | Cod sursa (job #1503691) | Cod sursa (job #2831089)
#include <bits/stdc++.h>
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
vector<vector<int>> lista;
bool vizitat[16001];
int costuri[16001];
int sume[16001];
void dfs(int x)
{
vizitat[x] = 1;
sume[x] = costuri[x];
for(auto i: lista[x])
{
if(!vizitat[i])
{
dfs(i);
if(sume[x] + sume[i] > sume[x])
sume[x] = sume[x] + sume[i];
}
}
}
int main()
{
int N, rez = -10000000, a, b;
f >> N;
for(int i = 1; i <= N; i++)
f >> costuri[i];
lista.resize(N + 1);
for(int i = 1; i < N; i++)
{
f >> a >> b;
lista[a].push_back(b);
lista[b].push_back(a);
}
dfs(1);
for(int i = 1; i <= N; i++)
if(sume[i] > rez)
rez = sume[i];
g << rez ;
return 0;
}