Pagini recente » Cod sursa (job #2869434) | Cod sursa (job #966311) | Cod sursa (job #1587204) | Cod sursa (job #1314074) | Cod sursa (job #917105)
Cod sursa(job #917105)
#include <fstream>
#include <vector>
using namespace std;
const int MAX_N = 16002;
int N, Res = -999999999, x, y;
int val[MAX_N], st[MAX_N], D[MAX_N], m[MAX_N];
vector < int > v[MAX_N];
int main()
{
ifstream f("asmax.in");
ofstream g("asmax.out");
f >> N;
for(int i = 1; i <= N; ++i)
f >> val[i];
for(int i = 1; i < N; ++i)
f >> x >> y, v[x].push_back(y), v[y].push_back(x);
for(int i = 1; i <= N; ++i)
if(!m[i])
{
int top = 1;
st[1] = i, m[i] = 1;
while(top)
{
int ok = 1;
x = st[top];
for(int j = 0; j < v[x].size(); ++j)
if(!m[ v[x][j] ])
m[ v[x][j] ] = 1, ok = 0, ++top, st[top] = v[x][j], j = v[x].size();
if(ok)
{
D[x] = val[x];
for(int j = 0; j < v[x].size(); ++j)
if(D[ v[x][j] ] > 0)
D[x] += D[ v[x][j] ];
if(D[x] > Res)
Res = D[x];
--top;
}
}
}
g << Res << '\n';
f.close();
g.close();
return 0;
}