Pagini recente » Cod sursa (job #3218432) | Cod sursa (job #1656290) | Cod sursa (job #2460259) | Cod sursa (job #2917158) | Cod sursa (job #3219172)
// pb #670 preordine pbinfo
//la preordine mai intai vreau radacina apoi fii, care din noduri nu are niciun tata
//void dfs(int node)
//cout<<nod;
//if(st[nod])
//dfs(st[nod]);
//if(dr[nod]) //daca dr[nod] exista
//dfs(dr[nod]);
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
vector<vector<int>> graf;
vector<int> vis;
const int MAX = 16000;
long long elem[MAX+1];
void dfs(int nod)
{
// cout<<elem[nod]<<" ";
vis[nod]=true;
for(int vec:graf[nod])
{
if(!vis[vec])
{
dfs(vec);
//cout<<elem[vec]<<" ";
if(elem[vec]>0)
elem[nod]=elem[nod]+elem[vec];
}
}
}
int main()
{
int n;
in>>n;
vis.resize(n+1);
graf.resize(n+1);
for(int i=1; i<=n; ++i)
in>>elem[i];
for(int i=0; i<n-1; ++i)
{
int poz1, poz2;
in>>poz1>>poz2;
graf[poz1].push_back(poz2);
graf[poz2].push_back(poz1);
}
dfs(1);
long long maxi = (-MAX)*1000;
for(int i=1; i<=n; ++i)
{
if(elem[i]>maxi)
maxi=elem[i];
}
out<<maxi;
return 0;
}