Pagini recente » Cod sursa (job #2336973) | Cod sursa (job #513385) | Cod sursa (job #639583) | Cod sursa (job #1201687) | Cod sursa (job #2830230)
#include <bits/stdc++.h>
using namespace std;
int asmax(const int nodCrt, vector<int>& sumaMax, const vector<vector<int>>& lsAd)
{
static int maxVal = -10000;
static vector<bool> vizitat(sumaMax.size(), false);
vizitat[nodCrt] = true;
for (auto vecin : lsAd[nodCrt])
if (!vizitat[vecin])
{
asmax(vecin,sumaMax,lsAd);
sumaMax[nodCrt] = max(sumaMax[vecin] + sumaMax[nodCrt], sumaMax[nodCrt]);
}
maxVal = max(maxVal, sumaMax[nodCrt]);
if (nodCrt == 1)
return maxVal;
}
int main()
{
ifstream in("asmax.in");
ofstream out("asmax.out");
int N;
in >> N;
vector<int> valori(N+1);
vector<int> sumaMax(N+1);
for (int i = 1; i <= N; i++)
in >> sumaMax[i];
vector<vector<int>> lsAd(N+1);
for (int i = 0; i < N-1; i++)
{
int x, y;
in >> x >> y;
lsAd[x].push_back(y);
lsAd[y].push_back(x);
}
out << asmax(1,sumaMax,lsAd);
}