Pagini recente » Cod sursa (job #146822) | Cod sursa (job #1861550) | Cod sursa (job #2376226) | Cod sursa (job #457027) | Cod sursa (job #1559379)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
const int MAX = 16005;
const int INF = 0x3f3f3f3f;
using VI = vector<int>;
vector<VI> G;
vector<bool> s;
int N;
VI val;
int smax = -INF;
VI sum;
void Read();
void DF( int x );
int main()
{
Read();
DF(1);
fout << smax << '\n';
fin.close();
fout.close();
return 0;
}
void Read()
{
int i, x, y;
fin >> N;
G = vector<VI>(N + 1);
s = vector<bool>(N + 1);
val = vector<int>(N + 1);
sum = vector<int>(N + 1);
for ( i = 1; i <= N; i++ )
{
fin >> x;
val[i] = x;
}
for ( i = 1; i < N; i++ )
{
fin >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
}
void DF( int x )
{
s[x] = true;
//cout << x << ' ';
sum[x] = val[x];
for ( const auto& a : G[x] )
{
if ( s[a] ) continue;
DF(a);
if ( sum[a] > 0 )
sum[x] += sum[a];
}
smax = max( smax, sum[x] );
//cout << x << ' ' << sum[x]; cin.get();
}