Cod sursa(job #1482528)

Utilizator roxannemafteiuMafteiu-Scai Roxana roxannemafteiu Data 7 septembrie 2015 13:52:09
Problema Asmax Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I, Semestrul 2 Marime 1.27 kb
#include <stdio.h>
#include <vector>

#define NMAX 16001

FILE *in, *out;

using namespace std;

int N, a, b;
int valoare[NMAX], suma[NMAX];
bool vizitat[NMAX];
vector <int> graf[NMAX];

void citire()
{
    in=fopen("asmax.in", "rt");

    fscanf(in, "%d", &N);
    for (int i = 1; i <= N; i++){
        fscanf(in, "%d", &valoare[i]);
    }

    for (int i = 1; i < N; i++){
        fscanf(in, "%d%d", &a, &b);
        graf[a].push_back(b);
        graf[b].push_back(a);
    }

    fclose(in);
}


void DFS(int nod)
{
    vizitat[nod] = true;
    suma[nod] = valoare[nod];
    int l = graf[nod].size();

    for(int j = 0; j < l; j++){
        int fiu = graf[nod][j];
        if(vizitat[fiu] == false){
            DFS(fiu);
            if( suma[fiu] > 0){
                suma[nod] += suma[fiu];
            }
        }
    }
}

void afisare()
{
    out=fopen("asmax.out", "wt");

    for( int i = 1; i <= N; i++){
        if(!vizitat[i]){
            DFS(i);
        }
    }

    int maxim = suma[1];
    for( int i = 1; i <= N; i++){
        if(suma[i] > maxim){
            maxim = suma[i];
        }
    }

    fprintf(out, "%d", maxim);
    fclose(out);
}

int main()
{
    citire();
    afisare();
    return 0;
}