Pagini recente » Cod sursa (job #2580112) | Cod sursa (job #1906646) | Cod sursa (job #1145389) | Cod sursa (job #816355) | Cod sursa (job #2953675)
#include <bits/stdc++.h>
using namespace std;
vector<int> graf[16500];
int vf[16005];
int nod[16006];
int main(void){
ofstream cout("asmax.out");
ifstream cin("asmax.in");
int n;
cin >> n;
for(int i= 1;i<=n;i++){
cin >> nod[i];
}
for(int i = 1;i<=n-1;i++){
int a, b;
cin>> a >> b;
graf[a].push_back(b);
graf[b].push_back(a);
}
for(int i = 1;i<=n;i++){
sort(graf[i].begin(), graf[i].end());
}
int maxim = -1;
for(int nd = 1;nd<=1;nd++){ //. imi este de ajuns sa fac de la nodul 1 pentru ca stim ca graful graf este un arbore
if(vf[nd] == 0){
/// facem BFS -ul
queue<int> coada;
coada.push(nd);
int suma = nod[nd]; /// suma subgrafului conex
vf[nd] = 1;
while(!coada.empty()){
int ndd = coada.front();
for(int i = 0;i<graf[ndd].size();i++){
int vecinu = graf[ndd][i];
if(vf[vecinu] == 0){
vf[vecinu] = 1;
suma +=nod[vecinu];
maxim = max(maxim, suma);
coada.push(vecinu);
vf[vecinu] = 1;
}
}
coada.pop();
}
maxim = max(maxim,suma);
}
}
cout << maxim;
}