Cod sursa(job #2648285)

Utilizator felix24mihaiPrava Felix Mihai felix24mihai Data 9 septembrie 2020 19:06:31
Problema Asmax Scor 100
Compilator cpp-32 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <iostream>
#include <fstream>
#include <vector>
#define NMax 16001
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");

vector<int> nodes[NMax];
int n, value[NMax], nrEdges[NMax];
unsigned int visited[NMax];
int sumMax=-9999, start;
void read(){
    f >> n;
    int a,b;
    for (int i=1; i<=n; i++){
        f >> value[i];
        if (value[i] > sumMax)
            sumMax = value[i];
        }
    for (int i=1; i<n; i++){
        f >> a >> b;
        nrEdges[a]++;
        nrEdges[b]++;
        if (nrEdges[a] == 1)
            start = a;
        if (nrEdges[b] == 1)
            start = b;
        nodes[a].push_back(b);
        nodes[b].push_back(a);
    }
}

int sumOf(int node){
    int sum = value[node];
    for (int i=0; i<nodes[node].size(); i++)
        if (visited[nodes[node][i]] == 0){
            visited[nodes[node][i]] = 1;
            int currentSum = sumOf(nodes[node][i]);
            if (currentSum > 0)
                sum += currentSum;
            if (currentSum > sumMax)
                sumMax = currentSum;
        }
    return sum;
}

int main()
{
    read();
    visited[start] = 1;
    g << max(sumOf(start),sumMax);
    return 0;
}