Pagini recente » Cod sursa (job #901173) | Cod sursa (job #1960105) | Cod sursa (job #2182312) | Cod sursa (job #2771455) | Cod sursa (job #1089177)
#include <fstream>
#include <vector>
using namespace std;
#define NMAX 16010
ifstream f("asmax.in");
ofstream g("asmax.out");
vector<int> G[NMAX];
int N, Values[NMAX],DP[NMAX],MaxSum = -200000;
bool Used[NMAX];
void DFS(int node)
{
Used[node] = true;
DP[node] = Values[node];
for (vector<int>::iterator it = G[node].begin(); it != G[node].end(); ++it) {
if (!Used[*it]) {
DFS(*it);
if ( DP[*it] > 0 )
DP[node] += DP[*it];
}
}
}
void Read()
{
f>>N;
for (int i = 1; i <= N; i++) {
f>>Values[i];
}
for (int x,y,i = 1; i <= N-1 ; i++) {
f>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
}
void Solve()
{
DFS(1);
for (int i = 1; i <= N; i++) {
g<<DP[i]<<" ";
MaxSum = max(MaxSum, DP[i]);
}
}
void Write()
{
g<<"\n"<<MaxSum;
}
int main()
{
Read();
Solve();
Write();
return 0;
}