Pagini recente » Cod sursa (job #1532518) | Cod sursa (job #1443909) | Cod sursa (job #1438418) | Cod sursa (job #1536023) | Cod sursa (job #1443938)
#include <cstdio>
#include <vector>
#include <string.h>
#define NMAX 16001
using namespace std;
bool viz[NMAX];
int n, vmax, v[NMAX];
vector <int> vecini[NMAX];
void citeste()
{
int a, b;
FILE *f = fopen("asmax.in", "r");
fscanf(f, "%i", &n);
for (int i = 1; i <= n; i++)
fscanf(f, "%i", &v[i]);
for (int i = 1; i < n; i++)
{
fscanf(f, "%i%i", &a, &b);
vecini[a].push_back(b);
vecini[b].push_back(a);
}
vmax = v[1];
memset(viz, false, NMAX);
fclose(f);
}
int parcurge(int x)
{
int y;
viz[x] = true;
for (vector<int>::iterator it = vecini[x].begin(); it != vecini[x].end(); it++)
if (!viz[*it])
{
y = parcurge(*it);
if (y > 0)
v[x] += y;
}
if (vmax < v[x])
vmax = v[x];
return v[x];
}
void afiseaza()
{
FILE *f = fopen("asmax.out", "w");
fprintf(f, "%i", vmax);
fclose(f);
}
int main()
{
citeste();
parcurge(1);
afiseaza();
return 0;
}