Cod sursa(job #1435658)

Utilizator fhandreiAndrei Hareza fhandrei Data 13 mai 2015 23:39:46
Problema Asmax Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I, Semestrul 2 Marime 1.12 kb
// Include
#include <fstream>
#include <vector>
using namespace std;
 
// Definitii
#define pb push_back
 
// Constante
const int sz = (int)16e3+1;
const int oo = (1<<30)-1;
 
// Functii
int dfs(int node, int father);
 
// Variabile
ifstream in("asmax.in");
ofstream out("asmax.out");
 
int nodes;
int values[sz];
int maxSum = -oo;
 
vector<int> graph[sz];
 
// Main
int main()
{
    in >> nodes;
    for(int i=1 ; i<=nodes ; ++i)
        in >> values[i];
     
    int rFrom, rTo;
    for(int i=1 ; i<nodes ; ++i)
    {
        in >> rFrom >> rTo;
        graph[rFrom].pb(rTo);
        graph[rTo].pb(rFrom);
    }
     
    dfs(1, -1);
    out << maxSum << '\n';
     
    in.close();
    out.close();
    return 0;
}
 
int dfs(int node, int father)
{
    int sum = values[node];
    vector<int>::iterator it, end=graph[node].end();
    for(it=graph[node].begin() ; it!=end ; ++it)
    {
        if(*it == father)
            continue;
        int tempSum = dfs(*it, node);
        if(tempSum > 0)
            sum += tempSum;
    }
    maxSum = max(maxSum, sum);
    return sum;
}