Cod sursa(job #1827497)

Utilizator Laura_CorneiLaura Maria Cornei Laura_Cornei Data 11 decembrie 2016 21:17:50
Problema Asmax Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#include <stdint.h>
using namespace std;
fstream f1("asmax.in", ios::in);
fstream f2("asmax.out", ios::out);
int32_t n, val[16001], stiva[16001], cap[16001], v[32001], viz[16001];
int32_t  maxi=-999999999;
struct muchie
{
    int x, y;
}muc[16001];
void dfs(int nod)
{
    int32_t i;
    ///vizitezi mai intai radacina, apoi fii
    for(i=cap[nod]; i<cap[nod+1]; i++)
        if(!viz[v[i]])
    {
        viz[v[i]]=1;
        dfs(v[i]);///calculezi suma pentru v[i]
        if(val[v[i]]>0) val[nod]+=val[v[i]];
    }
    ///ai calculat val[nod], reactualizezi maximul
    if(maxi< val[v[i]]) maxi=val[v[i]];
}
int main()
{
    int32_t i, m1 ,m2;
    f1>>n;
    for(i=1; i<=n; i++)
        f1>>val[i];
    for(i=1; i<n; i++)
    {
        f1>>m1>>m2;
        muc[i].x=m1;
        muc[i].y=m2;
        stiva[m1]++;
        stiva[m2]++;
    }
    cap[1]=1;
    for(i=1; i<=n; i++)
    {
        cap[i+1]=cap[i]+stiva[i];
        stiva[i]=cap[i];
    }
    stiva[1]=1;
    for(i=1; i<n; i++)
    {
        m1=muc[i].x;
        m2=muc[i].y;
        v[stiva[m1]]=m2;
        stiva[m1]++;
        v[stiva[m2]]=m1;
        stiva[m2]++;
    }

    viz[1]=1;
    dfs(1);
    f2<<maxi;
    return 0;
}