Pagini recente » Cod sursa (job #83813) | Cod sursa (job #2519220) | Cod sursa (job #680510) | Cod sursa (job #1401413) | Cod sursa (job #2830404)
#include<bits/stdc++.h>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
#define inf 1e9
vector <int>l[50005]; //lista de adiacenta
int valoare[50005]; //vector pt valorile asociate nodurilor
int suma[50005];
bool viz[50005];
int n;
void dfs(int s)
{
viz[s]=1;
suma[s] = valoare[s]; //pune in suma valoarea nodului initial
for(auto el:l[s])
{
if(viz[el]==0)
{
dfs(el);
suma[s] = max(suma[s], suma[s]+ suma[el]); //actualizeaza suma cu suma care este mai mare
}
}
}
int main()
{
in>>n;
for(int i = 1; i <= n; i++)
{
in >> valoare[i]; //pune valorile nodurilor in vectorul de valori
}
for(int i =0; i<n; i++)
{
int x,y;
in>>x>>y;
l[x].push_back(y);
l[y].push_back(x);
}
dfs(1);
//asmax
int suma_max = -inf; //suma maxima a nodurilor initial
for(int i =1; i<=n; i++)
{
if(suma[i] > suma_max)
{
suma_max = suma[i];
}
}
out<<suma_max;
return 0;
}