Pagini recente » Cod sursa (job #475964) | Cod sursa (job #344597) | Cod sursa (job #1532801) | Cod sursa (job #1510097) | Cod sursa (job #1455943)
#include<iostream>
#include<fstream>
#include<cmath>
#include<algorithm>
#include<vector>
#include<bitset>
#include<cstring>
#include<queue>
#define ull unsigned long long
#define ll long long
#define pb push_back
#define FOR(a,b,c) for (int a=b;a<=c; ++a)
#define ROF(a,b,c) for (int a=b;a>=c; --a)
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
int N,max1;
int v[16010]; // v[i]=suma maxima a unui subarbore ce are nodul i nodul cu cel mai inalt nivel
vector<int> a[16010]; // liste de adiacenta
bitset<16010> verif;
void depth(int);
int main()
{
max1=-(1<<31);
f>>N;
FOR (i,1,N) f>>v[i];
FOR (i,1,N-1) {
int x,y;
f>>x>>y;
a[x].pb(y);
a[y].pb(x);
}
depth(1);
g<<max1;
f.close();g.close();
return 0;
}
void depth(int n) {
verif[n]=true;
for (unsigned int k=0;k<a[n].size();++k) {
if (!verif[a[n][k]]) {
depth(a[n][k]);
v[n]+=(v[a[n][k]]>0) ? v[a[n][k]] : 0;
}
}
max1=(v[n]>max1) ? v[n] : max1;
}