Cod sursa(job #3219172)

Utilizator YuzukyIstrate Andreea Ruxandra Yuzuky Data 30 martie 2024 12:07:25
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
// pb #670 preordine pbinfo
//la preordine mai intai vreau radacina apoi fii, care din noduri nu are niciun tata

//void dfs(int node)
//cout<<nod;
//if(st[nod])
//dfs(st[nod]);
//if(dr[nod]) //daca dr[nod] exista
//dfs(dr[nod]);
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
vector<vector<int>> graf;
vector<int> vis;
const int MAX = 16000;
long long elem[MAX+1];
void dfs(int nod)
{
  //  cout<<elem[nod]<<" ";
    vis[nod]=true;
    for(int vec:graf[nod])
    {
        if(!vis[vec])
        {
            dfs(vec);
            //cout<<elem[vec]<<" ";
            if(elem[vec]>0)
                elem[nod]=elem[nod]+elem[vec];
        }
    }
}
int main()
{
    int n;
    in>>n;
    vis.resize(n+1);
    graf.resize(n+1);
    for(int i=1; i<=n; ++i)
        in>>elem[i];
    for(int i=0; i<n-1; ++i)
    {
        int poz1, poz2;
        in>>poz1>>poz2;
        graf[poz1].push_back(poz2);
        graf[poz2].push_back(poz1);
    }
    dfs(1);
    long long maxi = (-MAX)*1000;
    for(int i=1; i<=n; ++i)
    {
        if(elem[i]>maxi)
            maxi=elem[i];
    }
    out<<maxi;
    return 0;
}