Pagini recente » Cod sursa (job #1442154) | Cod sursa (job #1353462) | Cod sursa (job #944773) | Cod sursa (job #2924527) | Cod sursa (job #183140)
Cod sursa(job #183140)
#include<stdio.h>
#define INPUT "asmax.in"
#define OUTPUT "asmax.out"
#define NMAX 16001
#define INFI -32000
FILE *fin = fopen(INPUT, "r"), *fout = fopen(OUTPUT, "w");
typedef struct Graph
{
int node;
Graph *next;
};
Graph *List[ NMAX ];
int N;
int A[ NMAX ], Cost[ NMAX ], util[ NMAX ];
void readValues()
{
Graph *adr;
int X, Y;
fscanf(fin, "%d", &N);
for(int i = 0; i < N; ++i)
fscanf(fin, "%d", &A[ i ]);
for(int i = 0; i < N - 1; ++i)
{
fscanf(fin, "%d %d", &X, &Y);
adr = new Graph;
adr -> node = Y;
adr -> next = List[ X ];
List[ X ] = adr;
adr = new Graph;
adr -> node = X;
adr -> next = List[ Y ];
List[ Y ] = adr;
}
}
void DF(int Rad)
{
Graph *adr;
adr = List[ Rad ];
util[ Rad ] = 1;
Cost[ Rad ] = 0;
while(adr != NULL)
{
if(!util[ adr -> node ])
{
DF(adr -> node);
if(Cost[ adr -> node ] > 0)
Cost[ Rad ] += Cost[ adr -> node ];
}
adr = adr -> next;
}
Cost[ Rad ] += A[ Rad - 1];
}
void solveFunction()
{
int Max;
DF(1);
Max = INFI;
for(int i = 0; i < N; ++i)
if(Cost[ i + 1] > Max)
Max = Cost[ i + 1];
fprintf(fout, "%d\n", Max);
}
int main()
{
readValues();
solveFunction();
fclose(fin);
fclose(fout);
return 0;
}