Pagini recente » Cod sursa (job #3212067) | lista3 | Cod sursa (job #1900345) | Cod sursa (job #2570764) | Cod sursa (job #1718653)
#include <fstream>
#include <vector>
#include <queue>
#define DIM 16005
using namespace std;
vector<int> adj[DIM];
queue<int> q;
int n,v[DIM],deg[DIM],sum[DIM];
void calculate() {
while(!q.empty()) {
int u=q.front();
deg[u]=-2;
for(int i=0;i<adj[u].size();i++) {
if(deg[adj[u][i]]!=-2&&sum[u]>0)
sum[adj[u][i]]+=sum[u];
if(deg[adj[u][i]]==1&&adj[u][i]!=1)
q.push(adj[u][i]);
deg[adj[u][i]]--;
}
q.pop();
}
}
int main()
{
ifstream fin("asmax.in");
ofstream fout("asmax.out");
fin>>n;
for(int i=1;i<=n;i++)
fin>>v[i],sum[i]=v[i];
int a,b;
for(int i=1;i<n;i++) {
fin>>a>>b;
adj[a].push_back(b);
adj[b].push_back(a);
}
for(int i=1;i<=n;i++) {
deg[i]=adj[i].size()-1;
if(deg[i]==0)
q.push(i);
}
calculate();
int maxim=sum[1];
for(int i=2;i<=n;i++) {
if(sum[i]>maxim)
maxim=sum[i];
}
fout<<maxim;
return 0;
}