Pagini recente » Cod sursa (job #1831198) | Cod sursa (job #2307576) | Cod sursa (job #2364279) | Cod sursa (job #452871) | Cod sursa (job #1278119)
#include <fstream>
#include <list>
using namespace std;
list <int> adiacList[16001];
int visited[16001];
int valori[16001];
int maximumArb = 0x80000000;
long int dfs(int x)
{
long int sum = valori[x], y;
list <int>::iterator it, it_end;
for (it = adiacList[x].begin(), it_end = adiacList[x].end(); it != it_end; ++it)
{
if (!visited[*it])
{
visited[*it] = 1;
y = dfs(*it);
if (y > 0)
sum += y;
}
}
if (maximumArb < sum)
maximumArb = sum;
return sum;
}
int main()
{
FILE * fin = fopen ("asmax.in", "r");
FILE * fout = fopen ("asmax.out", "w");
int n, m, i, j;
fscanf(fin, "%d", &n);
m = n;
for (i = 1; i <= m; ++i)
{
fscanf(fin, "%d", &valori[i]);
}
while (--m)
{
fscanf(fin, "%d %d", &i, &j);
adiacList[i].push_back(j);
adiacList[j].push_back(i);
}
visited[1] = 1;
dfs(1);
fprintf(fout, "%ld\n", maximumArb);
fclose(fin);
fclose(fout);
return 0;
}