Pagini recente » Cod sursa (job #1029824) | Cod sursa (job #882895) | Cod sursa (job #1735406) | Cod sursa (job #2553084) | Cod sursa (job #1844587)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
const int Inf = 0x3f3f3f3f;
using VI = vector<int>;
vector<VI> G;
VI v, sum;
vector<bool> s;
int N;
int smax = -Inf;
void Read();
void DF( int nod );
int main()
{
Read();
DF(1);
fout << smax << '\n';
fin.close();
fout.close();
return 0;
}
void Read()
{
int x, y, i;
fin >> N;
G = vector<VI>(N + 1);
sum = v = VI(N + 1);
s = vector<bool>(N + 1);
for ( i = 1; i <= N; ++i )
fin >> v[i];
for ( i = 1; i < N; ++i )
{
fin >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
}
void DF( int nod )
{
s[nod] = true;
sum[nod] = v[nod];
for ( const auto& x : G[nod] )
if ( !s[x] )
{
DF(x);
if ( sum[x] > 0 )
sum[nod] += sum[x];
}
smax = max( smax, sum[nod] );
}