Cod sursa(job #2133210)

Utilizator catalinlupCatalin Lupau catalinlup Data 16 februarie 2018 17:47:29
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>
#define INFILE "asmax.in"
#define OUTFILE "asmax.out"
using namespace std;
ifstream in(INFILE);
ofstream out(OUTFILE);
int N;
map<int,int> val;
vector<int> valTree;
struct Graph{
    vector<vector<int>> Adj;
    int N;
    void init(int N){
        this->N=N;
        Adj.resize(N+1);
    }
    void Add(int x,int y){
        Adj[x].push_back(y);
        Adj[y].push_back(x);
    }
}G;
void Read(){
    in>>N;
    G.init(N);
    valTree.resize(N+1);
    for(int i=1;i<=N;i++){
        int x;
        in>>x;
        val[i]=x;
    }
    for(int i=1;i<=N-1;i++){
        int x,y;
        in>>x>>y;
        G.Add(x,y);
    }
}

void DFS(int x,bool viz[]){
    valTree[x]=val[x];
    viz[x]=true;
    for(auto y:G.Adj[x]){
        if(!viz[y]){
            DFS(y,viz);
            if(valTree[y]>0)
                valTree[x]+=valTree[y];
        }
    }
}

void Determinare(){
    bool viz[N+1];
    memset(viz,false,sizeof(viz));
    DFS(1,viz);
    int Max=valTree[1];
    for(int i=2;i<=N;i++)
        Max=max(Max,valTree[i]);
    out<<Max;
}

int main()
{
    Read();
    Determinare();
    return 0;
}