Mai intai trebuie sa te autentifici.
Cod sursa(job #1429179)
Utilizator | Data | 5 mai 2015 20:04:07 | |
---|---|---|---|
Problema | Asmax | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.93 kb |
#include <iostream>
#include <vector>
using namespace std;
const int NMAX = 16000 + 1;
const int INF = 1<<30;
struct {
vector<short int> vecini;
// short int val;
int suma = 0;
bool vizitat = false;
} nod[NMAX];
void dfs(const int v) {
nod[v].vizitat = true;
for (auto u: nod[v].vecini) {
if (!nod[u].vizitat) {
dfs(u);
if (nod[u].suma > 0) {
nod[v].suma += nod[u].suma;
}
}
}
}
int main() {
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
int N; scanf("%d", &N);
for (int v = 1; v <= N; v++) {
scanf("%d", &nod[v].suma);
}
for (int i = 1; i < N; i++) {
int v, u;
scanf("%d %d", &v, &u);
nod[v].vecini.push_back(u);
nod[u].vecini.push_back(v);
}
for (int v = 1; v <= N; v++) {
if (!nod[v].vizitat) {
dfs(v);
}
}
int smax = -INF;
for (int v = 1; v <= N; v++) {
// printf("%d %d\n", v, nod[v].suma);
smax = max(smax, nod[v].suma);
}
printf("%d", smax);
return 0;
}