Pagini recente » Cod sursa (job #3000696) | Cod sursa (job #430602) | Cod sursa (job #2515362) | Cod sursa (job #3141896) | Cod sursa (job #163179)
Cod sursa(job #163179)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int N;
int V[16001];
vector<int> G[16001];
int R[16001];
void calculeaza(int u, int p) {
for (vector<int>::iterator v = G[u].begin(); v != G[u].end(); ++v)
if (*v != p)
calculeaza(*v, u);
R[u] = V[u];
for (vector<int>::iterator v = G[u].begin(); v != G[u].end(); ++v)
if ((*v != p) && (R[*v] > 0))
R[u] += R[*v];
//cout << "Calculez " << u << ": " << R[u] << endl;
}
int main(int argc, char *argv[]) {
FILE *fi = fopen("asmax.in", "r");
fscanf(fi, "%d", &N);
for (int i(1); i <= N; ++i)
fscanf(fi, "%d", V + i);
int u, v;
for (int i(1); i <= N - 1; ++i) {
fscanf(fi, "%d %d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
fclose(fi);
/*for (int i(1); i <= N; ++i) {
cout << i << ": ";
for (vector<int>::iterator j = G[i].begin(); j != G[i].end(); ++j)
cout << *j << " ";
cout << endl;
}*/
calculeaza(1, 0);
int m(0);
for (int i(1); i <= N; ++i)
if (R[i] > m)
m = R[i];
ofstream fout("asmax.out");
fout << m << endl;
fout.close();
return 0;
}