Pagini recente » Cod sursa (job #2394929) | Cod sursa (job #370905) | Cod sursa (job #2034081) | Cod sursa (job #651124) | Cod sursa (job #1052378)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
const int MAXN = 16011;
int N, M, cost[MAXN], sum[MAXN], sum_max = -MAXN;
vector <int> arb[MAXN];
bool used[MAXN];
inline int maxim (int a, int b)
{
if ( a < b )
return b;
return a;
}
inline void dfs(int nod)
{
used[nod] = true;
sum[nod] = cost[nod];
sum_max = maxim(sum_max, sum[nod]);
for ( int i = 0; i < arb[nod].size(); ++i)
{
int y = arb[nod][i];
if ( !used[y] )
{
dfs(y);
if ( sum[y] > 0 )
sum[nod] += sum[y];
sum_max = maxim(sum_max, sum[nod]);
}
}
}
void citire()
{
int x, y;
fin >> N;
for ( int i = 1; i <= N; ++i)
fin >> cost[i];
for ( int i = 1; i < N; ++i)
{
fin >> x >> y;
arb[x].push_back(y);
arb[y].push_back(x);
}
}
int main ()
{
citire();
dfs(1);
fout << sum_max;
fin.close();
fout.close();
return 0;
}