Cod sursa(job #2462512)

Utilizator ioana.jianuIoana Jianu ioana.jianu Data 27 septembrie 2019 14:53:54
Problema Asmax Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <iostream>
#include <stdio.h>
#include <vector>

using namespace std;

const int NMAX = 16001;

vector <int> v[NMAX];
int s[NMAX], viz[NMAX], val[NMAX];

int DFS(int nod) {
    //int fiu;
    if (viz[nod] == 1)
        return s[nod];
    viz[nod] = 1;

  //  maxim = -16000001;
   // if (v.size == 0)
    s[nod] = val[nod];
    for (int fiu : v[nod]) {
        if (viz[fiu] == 0 && DFS (fiu) >= 0)
            s[nod] += s[fiu];
      //  if (s[fiu] > maxim])
        //    maxim = s[fiu];
    }
   // if (maxim < 0)
      //  s[nod] = maxim;
    return s[nod];
}

int main() {

    freopen ("asmax.in", "r", stdin);
    freopen ("asmax.out", "w", stdout);

    int n, i, pp, maxim, a, b;

    scanf ("%d", &n);
    pp = 1;
    for (i = 1; i <= n; i++) {
        scanf ("%d", &val[i]);
        if (val[i] >= 0)
            pp = 0;
    }
    if (pp == 1) {
        maxim = -1001;
        for (i = 1; i <= n; i++)
            if (val[i] > maxim)
                maxim = val[i];
        printf ("%d", maxim);
    }

    else {
        for (i = 1; i < n; i++) {
            scanf ("%d%d", &a, &b);
            v[a].push_back(b);
            v[b].push_back(a);
        }

        DFS(1);

        maxim = s[1];
        for (i = 2; i <= n; i++)
            if (s[i] > maxim)
                maxim = s[i];
        printf ("%d", maxim);
    }


    return 0;
}