Pagini recente » Borderou de evaluare (job #1569419) | Cod sursa (job #1633362) | Cod sursa (job #2157802) | Cod sursa (job #18360) | Cod sursa (job #2830815)
#include <bits/stdc++.h>
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
#define n_max 16002
vector<int> val(n_max);
vector<int> suma(n_max);
vector<vector<int>> lista_adiacenta;
vector<int> vizitat(n_max,0);
void dfs(int nod)
{
vizitat[nod] = 1;
suma[nod] = val[nod];
int i;
for(i = 0; i < lista_adiacenta[nod].size(); i++)
{
if(vizitat[lista_adiacenta[nod][i]] == 0)
{
dfs(lista_adiacenta[nod][i]);
if(suma[nod] < suma[nod] + val[lista_adiacenta[nod][i]])
suma[nod] = suma[nod] + val[lista_adiacenta[nod][i]];
}
}
}
int main()
{
int numar_noduri;
f >> numar_noduri;
int valoare;
for(int i = 1; i <= numar_noduri; i++) f >> valoare, val[i] = valoare;
lista_adiacenta.resize(numar_noduri+1);
int nod1, nod2;
for(int i = 1; i <= numar_noduri; i++)
{
f >> nod1 >> nod2;
lista_adiacenta[nod1].push_back(nod2);
lista_adiacenta[nod2].push_back(nod1);
}
dfs(1);
int rezultat = -2000000000;
for(int i = 1; i <= numar_noduri; i++)
if(suma[i] > rezultat) rezultat = suma[i];
g << rezultat;
return 0;
}