Pagini recente » Cod sursa (job #2581566) | Cod sursa (job #1223518) | Cod sursa (job #1705912) | Cod sursa (job #134294) | Cod sursa (job #1133446)
#include<fstream>
#include<iostream>
#include<vector>
using namespace std;
int N,val[16100],start,maxim=-99999999;
vector <int> v[16010];
bool viz[16100];
void citire() {
ifstream in("asmax.in");
int i,x,y;
in>>N;
for(i=1;i<=N;i++) {
in>>val[i];
if(val[i]>maxim)
maxim=val[i];
}
for(i=1;i<=N-1;i++) {
in>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
in.close();
}
void dfs(int nod) {
int vecin,i;
viz[nod]=1;
for(i=0;i<v[nod].size();i++) {
vecin=v[nod][i];
if(viz[vecin]==0){
dfs(vecin);
if(val[vecin]>0)
val[nod]+=val[vecin];
if(val[nod]>maxim)
maxim=val[nod];
}
}
}
void solve() {
int i;
for(i=1;i<=N;i++)
if(viz[i]==0) {
dfs(i);
}
}
void afisare() {
ofstream out("asmax.out");
out<<maxim<<'\n';
out.close();
}
int main() {
citire();
solve();
afisare();
return 0;
}