Pagini recente » Cod sursa (job #1172593) | Cod sursa (job #1636142) | Cod sursa (job #1571462) | Cod sursa (job #1259710) | Cod sursa (job #2828416)
#include <iostream>
#include <fstream>
#include <queue>
#include <algorithm>
#include <vector>
#define N 16005
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n;
vector <int> adjacency_list[N]; // lista de adiacenta a grafului
int weights[N]; // valorile pt fiecare nod
int max_graph[N];
bool visited[N];
void Read()
{
fin >> n;
for ( int i = 1; i <= n ; i++ )
fin >> weights[i];
for ( int i = 1; i <= n; i++ )
{
int x, y;
fin >> x >> y;
adjacency_list[x].push_back(y);
adjacency_list[y].push_back(x);
}
}
void DFS(int s)
{
visited[s] = 1;
max_graph[s] = weights[s];
for ( auto i : adjacency_list[s] )
{
if ( !visited[i] )
{
DFS(i);
if ( max_graph[i] > 0 )
max_graph[s] += max_graph[i];
}
}
}
void Solve_Write()
{
int maxv = -1001;
for ( int i = 1; i <= n; i++ )
maxv = max(maxv, max_graph[i]);
fout << maxv;
}
int main()
{
Read();
DFS(1);
Solve_Write();
return 0;
}