Pagini recente » Cod sursa (job #1608782) | Cod sursa (job #640058) | Istoria paginii runda/preoji_george | Cod sursa (job #1382362) | Cod sursa (job #1482525)
#include <stdio.h>
#include <vector>
#define NMAX 16001
FILE *in, *out;
using namespace std;
int N, a, b;
int valoare[NMAX], suma[NMAX];
bool vizitat[NMAX];
vector <int> graf[NMAX];
void citire()
{
in=fopen("asmax.in", "rt");
fscanf(in, "%d", &N);
for (int i = 1; i <= N; i++){
fscanf(in, "%d", &valoare[i]);
}
for (int i = 1; i < N; i++){
fscanf(in, "%d%d", &a, &b);
graf[a].push_back(b);
graf[b].push_back(a);
}
fclose(in);
}
void DFS(int nod)
{
vizitat[nod] = true;
suma[nod] = valoare[nod];
int l = graf[nod].size();
for(int j = 0; j < l; j++){
int fiu = graf[nod][j];
if(vizitat[fiu] == false){
DFS(fiu);
if( suma[fiu] > 0){
suma[nod] += suma[fiu];
}
}
}
}
void afisare()
{
out=fopen("asmax.out", "wt");
for( int i = 1; i <= N; i++){
if(!vizitat[i]){
DFS(i);
}
}
int maxim = 0;
for( int i = 1; i <= N; i++){
if(suma[i] > maxim){
maxim = suma[i];
}
}
fprintf(out, "%d", maxim);
fclose(out);
}
int main()
{
citire();
afisare();
return 0;
}