Cod sursa(job #1092273)

Utilizator PatrikStepan Patrik Patrik Data 26 ianuarie 2014 19:59:06
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
    #include<cstdio>
    #include<vector>
    using namespace std;
    #define MAX 16001
    #define pb push_back
    int N , s_max = -1001 , best[MAX] , v[MAX]  , p[MAX];
    vector<int> G[MAX];

    void read();
    void dfs(int x);
    void write();

    int main()
    {
        read();
        dfs(1);
        write();
        return 0;
    }

    void read()
    {
        int x , y;
        freopen("asmax.in" , "r" ,stdin );
        scanf("%d" , &N );
        for(int i = 1 ;  i <= N ; ++i )
            scanf("%d" , &v[i] );
        for(int  i = 1 ; i < N ; ++i )
        {
            scanf("%d%d" , &x , &y );
            G[x].pb(y);
            G[y].pb(x);
        }
    }

    void dfs(int x)
    {
        best[x] = v[x];
        for(int i = 0 ; i < (int)G[x].size() ; ++i )
        {
            if(G[x][i] == p[x])continue;
            p[G[x][i]] = x;
            dfs(G[x][i]);
            if(best[G[x][i]] > 0)
                best[x]+=best[G[x][i]];
        }
        if(best[x] > s_max )s_max = best[x];
    }

    void write()
    {
        freopen("asmax.out" , "w" ,stdout );
        printf("%d" , s_max);
    }