Pagini recente » Cod sursa (job #1228046) | Cod sursa (job #930176) | Cod sursa (job #56980) | Cod sursa (job #426239) | Cod sursa (job #2998549)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("asmax.in");
ofstream cout ("asmax.out");
const int N = 16e3;
int n, d[N+1], s[N+1];
bool viz[N+1];
vector <int> M[N+1];
void DFS(int nod)
{
viz[nod] = true;
s[nod] = d[nod];
for(unsigned int i = 0; i < M[nod].size(); i++)
{
int vecin = M[nod][i];
if(!viz[vecin])
{
DFS(vecin);
s[nod] = max(s[nod], s[nod] + s[vecin]);
}
}
}
int main()
{
cin >> n;
int a, b;
for(int i = 1; i <= n; i++)
cin >> d[i];
for(int i = 1; i < n; i++)
{
cin >> a >> b;
M[a].push_back(b);
M[b].push_back(a);
}
DFS(1);
int scor_max = s[1];
for (int i = 2; i <= n; i++)
{
scor_max = max(scor_max, s[i]);
}
cout << scor_max;
return 0;
}