Cod sursa(job #1200515)

Utilizator MaarcellKurt Godel Maarcell Data 22 iunie 2014 17:45:06
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#include <vector>
#include <string.h>
using namespace std;

int N, val[16010],MAX[16010]; vector<int> graf[16010]; bool vizitat[16010];
void dfs(int nod){
    if (!vizitat[nod]){
        vizitat[nod]=1;
        int i,add=val[nod];;
        for (i=0; i<graf[nod].size(); i++) dfs(graf[nod][i]);

        for (i=0; i<graf[nod].size(); i++) if (MAX[graf[nod][i]]>0) add+=MAX[graf[nod][i]];
        MAX[nod]=add;
    }
}
int main(){
    ifstream in("asmax.in");
    ofstream out("asmax.out");
    in >> N;
    int i,x,y;
    for (i=1; i<=N; i++) in >> val[i];
    for (i=1; i<N; i++){
        in >> x >> y;
        graf[x].push_back(y);
        graf[y].push_back(x);
    }
    memset(vizitat,0,sizeof(vizitat));
    memset(MAX,0,sizeof(MAX));
    dfs(1);
    int max_sum=-(1<<30);
    for (i=1; i<=N; i++)  if (MAX[i]>max_sum) max_sum=MAX[i];
    out << max_sum;
    return 0;
}