Pagini recente » Cod sursa (job #889833) | Cod sursa (job #1436947) | Cod sursa (job #1892807) | Cod sursa (job #2047284) | Cod sursa (job #2061921)
#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;
in>>n;
for(int i=1;i<=n;i++)
in>>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);
out<<Max<<"\n";
out.close();
return 0;
}