Cod sursa(job #2061925)

Utilizator valorosu_300Cristian Gherman valorosu_300 Data 9 noiembrie 2017 20:42:56
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int N = 16002;
int val[N], cost[N];
bool viz[N];
struct nod{
    int nr;
    nod *urm;
}*v[N];
void adaug(int x, int y){
    nod *p = new nod;
    p->nr = y;
    p->urm = v[x];
    v[x] = p;
}
void dfs(int ns, int &Max){
    for(nod *p = v[ns];p;p = p->urm)
        if(viz[p->nr] == false){
            viz[p->nr] = true;
            dfs(p->nr, Max);
            if(cost[p->nr] > 0)
                cost[ns] += cost[p->nr];
        }
    cost[ns] += val[ns];
    Max = max(cost[ns], Max);
}
int main()
{
    int n,x,y,Max = -1, valMax = -1;
    bool apare = false;
    in>>n;
    for(int i=1;i<=n;i++){
        in>>val[i];
        if(val[i] > 0)
            apare = true;
        valMax = max(valMax, val[i]);
    }
    for(int i=1;i<n;i++){
        in>>x>>y;
        adaug(x,y);
        adaug(y,x);
    }
    in.close();
    viz[1] = true;
    dfs(1,Max);
    if(apare == false)
        out<<valMax<<"\n";
    else
        out<<Max<<"\n";
    out.close();
    return 0;
}