Pagini recente » Cod sursa (job #2626508) | Cod sursa (job #449657) | Cod sursa (job #2708802) | Cod sursa (job #356274) | Cod sursa (job #1425570)
#include <fstream>
#include <vector>
using namespace std;
ifstream is("asmax.in");
ofstream os("asmax.out");
void Read();
void Df(int node);
vector<int> val;
vector<vector<int> > arb;
int n;
vector<bool> ok;
int maxim = -0x3f3f3f3f;
int main()
{
Read();
Df(1);
for(int i = 1; i <= n; ++i)
{
maxim = max( maxim, val[i]);
}
os << maxim;
is.close();
os.close();
return 0;
}
void Read()
{
is >> n;
int x;
int a, b;
val.resize(n+1);
arb.resize(n+1);
ok.resize(n+1);
for(int i = 1; i <= n; ++i)
{
is >> x;
val[i] = x;
}
for(int i = 1; i <= n-1; ++i)
{
is >> a >> b;
arb[a].push_back(b);
arb[b].push_back(a);
}
}
void Df(int node)
{
ok[node] = true;
for(const auto& i : arb[node])
{
if(!ok[i])
{
Df(i);
if(val[i] > 0)
val[node] += val[i];
}
}
}