Pagini recente » Cod sursa (job #2589937) | Cod sursa (job #616089) | Cod sursa (job #1897289) | Cod sursa (job #395245) | Cod sursa (job #1571797)
#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;
}