Pagini recente » Cod sursa (job #1562843) | Cod sursa (job #1113549) | Cod sursa (job #2089853) | Cod sursa (job #164011) | Cod sursa (job #2830386)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int n,a,x,y,maxim;
vector<int> c, mc;
vector<bool> viz;
vector<vector<int>> list;
ifstream in("asmax.in");
ofstream out("asmax.out");
void dfs(int p, int nod)
{
viz[nod] =1;
mc[nod] = c[nod];
for (int i = 0; i < list[nod].size(); ++i) {
int vec = list[nod][i];
if(!viz[vec])
dfs(nod, vec);
if(mc[vec] > 0 && vec!=p)
mc[nod]+=mc[vec];
}
if(mc[nod]>maxim)
maxim = mc[nod];
if(mc[nod] < 0)
mc[nod] = 0;
}
int main() {
in>>n;
list.resize(n+3);
viz.resize(n+3);
c.resize(n+3);
mc.resize(n+3);
for (int i = 1; i <= n; ++i) {
in>>c[i];
}
for (int i = 1; i < n; ++i) {
in>>x>>y;
list[x].push_back(y);
list[y].push_back(x);
}
maxim = -1000000000;
dfs(0,1);
out<<maxim<<'\n';;
}