Nu aveti permisiuni pentru a descarca fisierul grader_test4.in
Cod sursa(job #1800202)
| Utilizator | Data | 7 noiembrie 2016 15:30:56 | |
|---|---|---|---|
| Problema | Asmax | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 1.05 kb |
#include <cstdio>
#define MAXN 100000
int r, n, lista[MAXN+1], nxt[2*MAXN+1], val[2*MAXN+1], cost[MAXN+1], best[MAXN+1];
bool viz[MAXN+1];
int ans;
inline int maxim(int a, int b){
return (a > b ? a : b);
}
inline void adauga(int x, int y)
{
val[++r] = y;
nxt[r] = lista[x];
lista[x] = r;
}
void dfs(int nod)
{
int p;
viz[nod] = 1;
p = lista[nod];
best[nod] = cost[nod];
while(p)
{
if(!viz[val[p]]){
dfs(val[p]);
if(best[val[p]] > 0)
best[nod] += best[val[p]];
}
p = nxt[p];
}
ans = maxim(ans, best[nod]);
}
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
int i, x, y;
scanf("%d", &n);
for(i=1; i<=n; ++i){
scanf("%d", &cost[i]);
ans += cost[i];
}
for(i=1; i<n; ++i)
{
scanf("%d%d", &x, &y);
adauga(x, y);
adauga(y, x);
}
dfs(1);
printf("%d", ans);
return 0;
}
