Pagini recente » Borderou de evaluare (job #1473754) | Borderou de evaluare (job #82888) | Borderou de evaluare (job #844035) | Borderou de evaluare (job #456870) | Cod sursa (job #2061905)
#include <fstream>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int N = 16002;
int val[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){
for(nod *p = v[ns];p;p = p->urm)
if(viz[p->nr] == false){
viz[p->nr] = true;
dfs(p->nr);
if(val[p->nr] > 0)
val[ns] += val[p->nr];
}
}
int main()
{
int n,x,y;
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);
out<<val[1]<<"\n";
out.close();
return 0;
}