Cod sursa(job #1827082)

Utilizator Laura_CorneiLaura Maria Cornei Laura_Cornei Data 11 decembrie 2016 13:56:54
Problema Asmax Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 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[16001], viz[16001];
int32_t t[16001], viz2[16001], coada[16001], prim=1, ultim=1, k=1;
int32_t  maxi=-999999999;
struct muchie
{
    int x, y;
}muc[16001];
void dfs(int nod)
{
    int32_t i;
    for(i=1 ; i<=n; i++)
        if((!viz[i])&&(t[i]==nod))
    {
        viz[i]=1;
        dfs(i);
        if(val[i]>0) val[nod]+=val[i];
    }

}
void bfs()
{
    int32_t i;
    while(k!=0)
    {
        for(i=cap[coada[prim]]; i<cap[coada[prim]+1]; i++)
            if(!viz2[v[i]])
        {
            ultim++;
            k++;
            coada[ultim]=v[i];
            viz2[v[i]]=1;
            t[coada[ultim]]=coada[prim];
        }
        prim++;
        k--;
    }
}
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]++;
    }

    viz2[1]=1;
    coada[prim]=1;
    bfs();

    viz[1]=1;
    dfs(1);


    for(i=1; i<=n; i++)
        if(val[i]>maxi) maxi=val[i];
    f2<<maxi;
    return 0;
}