Pagini recente » Cod sursa (job #2416678) | Cod sursa (job #1073573) | Cod sursa (job #2703916) | Cod sursa (job #2237182) | Cod sursa (job #2907424)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
#define MAX 16001
int N,x,y,i, suma_maxima = -1001;
vector <int> A[MAX];
int viz[MAX], cost[MAX];
void citire()
{
f >> N;
for (i = 1; i <= N; i++)
f>>cost[i];
for (i = 1; i < N; i++)
{
f >> x >> y;
A[x].push_back(y);
A[y].push_back(x);
}
f.close();
}
void DFS(int nod)
{
viz[nod] = 1;
for (auto j: A[nod]) {
// parcurg fiecare vecin al nodului curent
// daca nu este vizitat deja, apelez DFS
if (!viz[j]) {
DFS(j);
cost[nod] = max(cost[nod], cost[j] + cost[nod]);
}
}
suma_maxima = max(suma_maxima, cost[nod]);
}
int main()
{
// folosesc liste de vecini pentru retinerea grafului
citire();
// marchez toate nodurile ca fiind nevizitate
memset(viz, 0, sizeof(viz));
DFS(1);
g<<suma_maxima;
g.close();
return 0;
}