Pagini recente » Cod sursa (job #1679990) | Cod sursa (job #1941274) | Cod sursa (job #811014) | Cod sursa (job #430416) | Cod sursa (job #2061925)
#include <fstream>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int N = 16002;
int val[N], cost[N];
bool viz[N];
struct nod{
int nr;
nod *urm;
}*v[N];
void adaug(int x, int y){
nod *p = new nod;
p->nr = y;
p->urm = v[x];
v[x] = p;
}
void dfs(int ns, int &Max){
for(nod *p = v[ns];p;p = p->urm)
if(viz[p->nr] == false){
viz[p->nr] = true;
dfs(p->nr, Max);
if(cost[p->nr] > 0)
cost[ns] += cost[p->nr];
}
cost[ns] += val[ns];
Max = max(cost[ns], Max);
}
int main()
{
int n,x,y,Max = -1, valMax = -1;
bool apare = false;
in>>n;
for(int i=1;i<=n;i++){
in>>val[i];
if(val[i] > 0)
apare = true;
valMax = max(valMax, val[i]);
}
for(int i=1;i<n;i++){
in>>x>>y;
adaug(x,y);
adaug(y,x);
}
in.close();
viz[1] = true;
dfs(1,Max);
if(apare == false)
out<<valMax<<"\n";
else
out<<Max<<"\n";
out.close();
return 0;
}