Cod sursa(job #1571797)

Utilizator teodoramusatoiuTeodora Musatoiu teodoramusatoiu Data 18 ianuarie 2016 15:22:14
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb

#include <iostream>
#include <fstream>

using namespace std;
ifstream in ("ssm.in");
ofstream out ("ssm.out");

const long long INF = 100000000000LL;
long long v[30005], s[30005],n;
int vf[30005], lst[30005], urm[30005], m, nr;

void adaugare (int x,int y)
{
    //adaugare y in lista lui x
    nr++;
    vf[nr]=y;
    urm[nr]=lst[x];
    lst[x]=nr;
}

long long scor(int x,int &q)
{
    if(s[x]!=INF)
        return s[x];
    int p,y;
    long long sc;
    p=lst[x];
    s[x]=0;
    while(p!=0)
    {
        y=vf[p];
        sc=scor(y,q);
        if(sc>s[x])
            s[x]=sc;
        else q=x;
        p=urm[p];
    }
    s[x]+=v[x];
    return s[x];
}

int main()
{
    //citire
    int i,x,y,p,k,q,inc,fin;
    in>>n;
    for(i=1; i<=n; i++)
        in>>v[i];
    //creez lista
    for(i=1; i<=m; i++)
    {
        in>>x>>y;
        adaugare(y,x);
    }
    //
    for(i=1; i<=n; i++)
        s[i]=INF;
    int max=-INF;
    for(i=1; i<=n; i++)
        if(scor(i,q)>max)
        {
            max=scor(i,q);
            fin=q;
            inc=i;
        }
    out<<max<<inc<<fin;
    return 0;
}