Pagini recente » Cod sursa (job #2622917) | Cod sursa (job #2398987) | Cod sursa (job #1703155) | Cod sursa (job #1466141) | Cod sursa (job #2832615)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
const int N_Max = 16001;
vector<int> vecini[N_Max];
int N;
int reward[N_Max];
bool viz[N_Max];
void citire()
{
f >> N;
for (int i = 1; i <= N; i++)
{
f >> reward[i];
}
for (int i = 1; i <= N - 1; i++)
{
int x, y;
f >> x >> y;
vecini[x].push_back(y);
vecini[y].push_back(x);
}
}
void afisare(int &suma_max)
{
g << suma_max;
f.close();
g.close();
}
int DFS_summax(int node, int &suma_max)
{
int suma_now= reward[node];
viz[node] = true;
for(int i=0; i<vecini[node].size(); i++)
{
if (viz[vecini[node][i]] == false)
{
int suma_vecin = DFS_summax(vecini[node][i], suma_max);
if (suma_vecin > 0)
suma_now = suma_now+ suma_vecin;
}
}
suma_max = max(suma_max, suma_now);
return suma_now;
}
int main() {
int nodstart = 1;
int suma_max = -1000000;
citire();
DFS_summax(nodstart, suma_max);
afisare(suma_max);
return 0;
}