Pagini recente » Cod sursa (job #3198875) | Cod sursa (job #2211449) | Cod sursa (job #2495515) | Cod sursa (job #2305109) | Cod sursa (job #1200488)
#include <fstream>
#include <vector>
#include <string.h>
using namespace std;
int N, val[16010],MAX[16010]; vector<int> graf[16010]; bool vizitat[16010];
void dfs(int nod){
if (!vizitat[nod]){
vizitat[nod]=1;
int i,add=val[nod];;
for (i=0; i<graf[nod].size(); i++) dfs(graf[nod][i]);
int max_add=add;
for (i=0; i<graf[nod].size(); i++) if (MAX[graf[nod][i]]>0) max_add+=MAX[graf[nod][i]];
MAX[nod]=max_add;
}
}
int main(){
ifstream in("asmax.in");
ofstream out("asmax.out");
in >> N;
int i,x,y;
for (i=1; i<=N; i++) in >> val[i];
for (i=0; i<N; i++){
in >> x >> y;
graf[x].push_back(y);
graf[y].push_back(x);
}
memset(vizitat,0,sizeof(vizitat));
dfs(1);
int max_sum=-(1<<30);
for (i=1; i<=N; i++) if (MAX[i]>max_sum) max_sum=MAX[i];
out << max_sum;
return 0;
}