Cod sursa(job #2503185)

Utilizator DanSDan Teodor Savastre DanS Data 2 decembrie 2019 17:31:09
Problema Asmax Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>

using namespace std;

ifstream in("asmax.in");
ofstream out("asmax.out");

const int N = 15001;
const int M = 2*N;
const int INF = -10000001;

int lst[N], vf[2*M], urm[2*M], v[N], d[N];
int n, nr, m, x, y, t;
int rez;
bool viz[N];

void adauga(int x, int y)
{
    vf[++nr] = y;
    urm[nr] = lst[x];
    lst[x] = nr;
}

int calcul(int x)
{
    if(d[x] != INF)
    {
        return d[x];
    }
    int rez = 0;
    for(int p = lst[x]; p != 0; p = urm[p])
    {
        int y = vf[p];
        rez = max(rez, calcul(y));
    }
    rez += v[x];
    d[x] = rez;
    return d[x];
}

int main()
{
    nr = 0;
    rez = 0;
    in>>n>>m;
    for(int i=1; i<=n; i++)
    {
        d[i] = INF;
        lst[i] = 0;
    }
    for(int i=1; i<=n; i++)
        in>>v[i];
    for(int i=1; i<=m; i++)
    {
        in>>x>>y;
        adauga(y, x);
    }
    for(int i=1; i<=n; i++)
    {
        rez = max(rez, calcul(i));
    }
    out<<rez<<'\n';
    return 0;
}