Cod sursa(job #1597317)

Utilizator andreey_047Andrei Maxim andreey_047 Data 11 februarie 2016 21:33:39
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <bits/stdc++.h>

using namespace std;

const int nmax = 16009;

vector<int>G[nmax];
queue<int>q;
int c[nmax],N,nr[nmax],dp[nmax],best;
bool v[nmax];

inline void BFS(){
 int i,nod;

  for(i = 1; i <= N; ++i)
    if(nr[i] == 1) q.push(i);
   best = -nmax;
  while(!q.empty()){
    nod = q.front();
    q.pop();
    v[nod] = true;
    dp[nod]+= c[nod];

     for(auto it: G[nod]){
       --nr[it];
        if(dp[it] > 0)dp[nod]+=dp[it];
        if(!v[it] && nr[it] == 1)q.push(it);

     }
    best = max(best,dp[nod]);
  }

}

int main(){
    int i,x,y;
    freopen ("asmax.in","r",stdin);
    freopen ("asmax.out","w",stdout);
    scanf("%d\n",&N);
    for(i = 1; i <= N; ++i)
        scanf("%d ",&c[i]);
    for(i = 1; i < N; ++i){
       scanf("%d %d\n",&x,&y);
       G[x].push_back(y);
       G[y].push_back(x);
       ++nr[x];++nr[y];
    }
    BFS();
    printf("%d\n",best);
    return 0;
}