Pagini recente » Cod sursa (job #2493420) | Cod sursa (job #1220497) | Cod sursa (job #114813) | Cod sursa (job #2493365) | Cod sursa (job #1604807)
#include <fstream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
vector<int> valoare, mv;
vector<vector<int>> G;
vector<bool> viz;
//void bfs()
//{
// queue<int> q;
// q.push(1);
// tata[1] = -1;
// while (!q.empty())
// {
// int nod = q.front();
// q.pop();
// for (vector<int>::iterator it = G[nod].begin(); it != G[nod].end(); it++)
// {
// if (!tata[*it])
// {
// q.push(*it);
// tata[*it] = nod;
// }
// }
// }
//}
int dfs(int nod)
{
int maxChildren = 0;
for (vector<int>::iterator it = G[nod].begin(); it != G[nod].end(); it++)
{
if (!viz[*it])
{
viz[*it] = true;
int val = dfs(*it);
if (val > 0)
{
maxChildren += val;
}
}
}
mv[nod] = max(valoare[nod], valoare[nod] + maxChildren);
return mv[nod];
}
int main()
{
int N, i, x, y, z;
ifstream f("asmax.in");
f >> N;
valoare.resize(N + 1);
viz.resize(N + 1);
mv.resize(N + 1);
G.resize(N + 1);
for (i = 1; i <= N; i++)
{
f >> valoare[i];
}
for (i = 1; i <= N - 1; i++)
{
f >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
f.close();
viz[1] = true;
dfs(1);
int max = mv[1];
for (i = 2; i <= N; i++)
{
if (mv[i] > max)
{
max = mv[i];
}
}
ofstream g("asmax.out");
g << max;
g.close();
//bfs();
return 0;
}