Pagini recente » Cod sursa (job #1416068) | Cod sursa (job #1794416) | Cod sursa (job #1575256) | Cod sursa (job #1434847) | Cod sursa (job #2830581)
#include <iostream>
#include <fstream>
#include <vector>
#define inf 1<<30
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
vector <int> adiacenta[160001];
bool visited[160001];
int cost[160001];
void DFS(int vf, int &suma)
{
visited[vf] = true;
for(int i = 0; i < adiacenta[vf].size(); ++i)
if (!visited[adiacenta[vf][i]])
{
suma += cost[adiacenta[vf][i]];
DFS(adiacenta[vf][i], suma);
}
}
int main()
{
int N, a, b, s, maxim = -inf;
in>>N;
for(int i = 1; i <= N; ++i)
in>>cost[i];
for(int i = 1; i <= N; ++i)
visited[i] = false;
for(int i = 1; i < N; ++i)
{
in>>a>>b;
adiacenta[a].push_back(b);
adiacenta[b].push_back(a);
}
for(int i = 1; i <= N; i++){
if (!visited[i])
{
s = 0;
DFS(i, s);
if(s > maxim) maxim = s;
}
}
out<<maxim;
return 0;
}