Pagini recente » Cod sursa (job #1676688) | Cod sursa (job #1671090) | Cod sursa (job #2608231) | Cod sursa (job #1508717) | Cod sursa (job #2824715)
#include <iostream>
#include <fstream>
#include <vector>
#include <deque>
using namespace std;
vector < int > cost_subarbori;
void vizitat( vector < vector < int > > &vecini, vector < int > &culoare, int u, vector < int > costuri ){
culoare[u] = 1;
cost_subarbori[u] = costuri[u];
for( int i = 0; i < vecini[u].size(); i++ ){
if( culoare[ vecini[u][i] ] == 0 ){
vizitat(vecini,culoare,vecini[u][i],costuri);
if( cost_subarbori[u] + cost_subarbori[vecini[u][i]] > cost_subarbori[u] ){
cost_subarbori[u] = cost_subarbori[u] + cost_subarbori[vecini[u][i]];
}
}
}
}
int main(){
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int nr_noduri, nr_muchii;
fin >> nr_noduri;
vector < vector < int > > vecini(nr_noduri+1);
vector < int > costuri;
costuri.push_back(999999);
cost_subarbori.push_back(0);
for(int i = 0; i < nr_noduri; i++){
int cost;
fin >> cost;
costuri.push_back(cost);
cost_subarbori.push_back(0);
}
for( int i = 0; i < nr_noduri-1; i++ ){
int intrare, iesire;
fin >> intrare >> iesire;
vecini[intrare].push_back(iesire);
vecini[iesire].push_back(intrare);
}
int timp;
timp = 0;
vector < int > culoare(nr_noduri+1,0);
vizitat(vecini,culoare,1,costuri);
int max = cost_subarbori[1];
for( int i = 1; i < cost_subarbori.size(); i++ ){
if( max < cost_subarbori[i] ) max = cost_subarbori[i];
}
fout << max;
}