Pagini recente » Cod sursa (job #2156718) | Cod sursa (job #1527711) | Cod sursa (job #2218884) | Cod sursa (job #418155) | Cod sursa (job #183123)
Cod sursa(job #183123)
#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;
util[ Y ] = 1;
}
}
void DF(int Rad)
{
Graph *adr;
adr = List[ Rad ];
Cost[ Rad ] = 0;
while(adr != NULL)
{
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, Root;
Root = -1;
for(int i = 0; i < N; ++i)
if(util[ i + 1 ] == 0)
{
Root = i + 1;
break;
}
DF(Root);
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;
}