Nu aveti permisiuni pentru a descarca fisierul grader_test1.in
Cod sursa(job #13869)
Utilizator | Data | 7 februarie 2007 17:40:05 | |
---|---|---|---|
Problema | Asmax | Scor | 0 |
Compilator | c | Status | done |
Runda | Arhiva de probleme | Marime | 0.93 kb |
#include <stdio.h>
#define infinit 2000000000
#define nm 16555
int N, max, min, i, s, a, b, x;
int V[nm], d[nm][nm], viz[nm];
int dfs(int);
int main(void)
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
for (scanf("%d", &N), max = -(min = infinit), i = 1; i <= N; ++i)
{
scanf("%d", &V[i]);
if (V[i] > max) max = V[i];
if (V[i] < min) min = V[i];
s+=V[i];
}
for (i = 1; i < N; ++i)
{
scanf("%d%d", &a, &b);
d[a][++d[a][0]] = b;
d[b][++d[b][0]] = a;
}
if (max <= 0)
{
printf("%d\n", max);
return 0;
}
if (min >= 0)
{
printf("%d\n", s);
return 0;
}
for (i = 1; i <= N && V[i] < 0; ++i);
x = dfs(i);
printf("%d\n", x);
return 0;
}
int dfs(int x)
{
int S = V[x], i;
for (i = viz[x] = 1; i <= d[x][0]; ++i)
if (!viz[d[x][i]])
S += (s = dfs(d[x][i]));
if (S > 0) return S;
return 0;
}