Cod sursa(job #983514)

Utilizator gbi250Gabriela Moldovan gbi250 Data 12 august 2013 00:37:56
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <cstdio>
#include <vector>
#include <climits>
#define pb push_back
#define nodes 16001
using namespace std;

int n, i, val[nodes], x, y, MAX=INT_MIN, max_node[nodes];
vector <int> adj[nodes];
bool viz[nodes];

void DFS(int node)
{
    viz[node]=1;
    max_node[node]=val[node];
    for(unsigned j=0;j<adj[node].size();++j)
        if(!viz[adj[node][j]])
        {
            DFS(adj[node][j]);
            if(max_node[adj[node][j]]>0)
                max_node[node]+=max_node[adj[node][j]];
        }
}

int main()
{
    freopen("asmax.in", "r", stdin);
    freopen("asmax.out", "w", stdout);
    scanf("%d", &n);
    for(i=1;i<=n;++i)
        scanf("%d", &val[i]), max_node[i]=val[i];
    for(i=1;i<=n-1;++i)
    {
        scanf("%d %d", &x, &y);
        adj[x].pb(y);
        adj[y].pb(x);
    }
    for(i=1;i<=n;++i)
        if(!viz[i])
            DFS(i);
    for(i=1;i<=n;++i)
        if(max_node[i]>MAX)
            MAX=max_node[i];
    printf("%d\n", MAX);
    return 0;
}