Pagini recente » Cod sursa (job #1755108) | Cod sursa (job #2966549) | Cod sursa (job #3203489) | Cod sursa (job #1894991) | Cod sursa (job #1890624)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int N = 16005;
vector <int> vecini[N];
bool viz[N];
int val[N], maxim;
int dfs(int nod)
{
viz[nod] = true;
int maximus = val[nod], x;
vector <int> ::iterator it;
for(it = vecini[nod].begin(); it < vecini[nod].end(); ++it)
if(viz[*it] == false)
{
x = dfs(*it);
if(x > 0)
maximus += x;
}
if(maximus > maxim)
maxim = maximus;
return maximus;
}
int main()
{
int n, i, a, b;
in >> n;
for(i = 1; i <= n; i++)
in >> val[i];
maxim = val[1];
for(i = 1; i < n; i++)
{
in>> a >> b;
vecini[a].push_back(b);
vecini[b].push_back(a);
}
int d = dfs(1);
out <<maxim;
return 0;
}