Pagini recente » Cod sursa (job #664636) | Cod sursa (job #2968696) | Cod sursa (job #10405) | Cod sursa (job #185366) | Cod sursa (job #1882798)
#include <stdio.h>
#include <vector>
#define MAX_N 16000
using namespace std;
//struct anakin{
// int next, cost;
//};
vector <int> graf[MAX_N + 1];
int d[MAX_N + 1];
int N;
int c[MAX_N + 1];
bool seen[MAX_N + 1];
int sol = -999999999;
int MAX(int a, int b) {
return a > b ? a : b;
}
void DFS(int u) {
seen[u] = 1;
bool ok = 0;
vector <int> ::iterator it;
it = graf[u].begin();
for (it = graf[u].begin(); it != graf[u].end(); it++) {
if (!seen[*it]){
DFS(*it);
ok = 1;
d[u] = MAX(d[*it] + d[u], d[u]);
if (sol < d[u])
sol = d[u];
}
}
if (ok == 0) {
d[u] = c[u];
}
}
int main(){
FILE *fin = fopen("asmax.in", "r");
FILE *fout = fopen("asmax.out", "w");
int i, j;
int nr;
int a, b;
fscanf(fin, "%d", &N);
for (i = 1; i <= N; i++) {
fscanf(fin, "%d", &c[i]);
d[i] = c[i];
}
for (i = 1; i <= N - 1; i++) {
fscanf(fin, "%d %d", &a, &b);
graf[a].push_back(b);
graf[b].push_back(a);
}
DFS(1);
for (i = 1; i <= N; i++)
printf("%d ", d[i]);
fprintf(fout, "%d\n", sol);
return 0;
}