Pagini recente » Cod sursa (job #1024367) | Cod sursa (job #3228394) | Cod sursa (job #2576803) | Cod sursa (job #2827823) | Cod sursa (job #2092229)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("asmax.in");
ofstream fout ("asmax.out");
#define INF 0x3f3f3f
typedef vector<int> VI;
typedef vector<VI> VII;
typedef vector<bool> VB;
int n;
VII G;
VI sarb, A;
VB viz;
void Read();
void Dfs(int x);
void Write();
int main()
{
Read();
Dfs(1);
Write();
return 0;
}
void Read()
{
fin >> n;
G = VII(n + 1);
A = sarb = VI(n + 1);
viz = VB(n + 1);
for (int i = 1; i <= n; i ++)
fin >> A[i];
for (int i = 1, x, y; i < n; i ++)
{
fin >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
}
void Dfs(int x)
{
int sum = 0;
viz[x] = 1;
for (unsigned int i = 0; i < G[x].size(); i ++)
if (!viz[G[x][i]])
{
Dfs(G[x][i]);
sum += max(sarb[G[x][i]], 0);
}
sum += A[x];
sarb[x] = sum;
}
void Write()
{
int mx = INF * -1;
for (int i = 1; i <= n; i ++)
mx = max(mx, sarb[i]);
fout << mx;
}