#include <iostream>
#include <ctime>
using namespace std;
clock_t e,ee;
const int inf=1000000000,nn=1010;

int x[3][nn*(nn-1)],df[nn][nn],ras[nn],pred[nn],pytb[nn],q=0,ii=0,n,t,l1,l2;
bool v[nn];

int parent(int i)
{return i/2;}

int left(int i)
{return i*2;}

int right(int i)
{return i*2+1;}

int up(int k)
{
 int l,r,h=k;
 l=left(k);
 r=right(k);
 if(l<=ii && x[2][l]<x[2][k]) h=l;
 if(r<=ii && x[2][r]<x[2][h]) h=r;
 if(h!=k)
 {
  t=x[2][k];
  x[2][k]=x[2][h];
  x[2][h]=t;
  t=x[1][k];
  x[1][k]=x[1][h];
  x[1][h]=t;
  t=x[0][k];
  x[0][k]=x[0][h];
  x[0][h]=t;
  up(h);
 }
 return 0;
}

int del(int i)
{
 x[0][i]=x[0][ii];
 x[1][i]=x[1][ii];
 x[2][i]=x[2][ii];
 x[2][ii]=inf;
 ii--;
 up(i);
 return 0;
}

int down(int l)
{
 int h=parent(l);
 if(x[2][h]>x[2][l])
 {
  t=x[2][l];
  x[2][l]=x[2][h];
  x[2][h]=t;
  t=x[1][l];
  x[1][l]=x[1][h];
  x[1][h]=t;
  t=x[0][l];
  x[0][l]=x[0][h];
  x[0][h]=t;
  if(h>1)down(h);
 }
 return 0;
}

int Dijkstra(int k)
{
 v[k]=1;
 q++;
 for(int i=1;i<=ii;i++)
  if(v[x[1][i]]!=0)
   del(i);
 for(int i=1;i<=n;i++)
  if(df[k][i]!=-inf && k!=i)
  {
   if(v[i]==0)
   {
    ii++;
    x[0][ii]=k;
    x[1][ii]=i;
    x[2][ii]=df[k][i];
    if(ii>1)down(ii);
   }
   if(ras[i]>ras[k]+df[k][i])
   {
    pred[i]=k;
    ras[i]=ras[k]+df[k][i];
   }
  }
 for(int i=1;i<=ii;i++)
  if(v[x[1][i]]!=0)
   del(i);
 if(ii>0)Dijkstra(x[1][1]);
 return 0;
}

int main()
{
 e=clock();
 int i,p0,p1,p2,m;
 freopen("in.txt","r",stdin);
 //freopen("out.txt","w",stdout);
 cin>>n>>m>>l1>>l2;
 for(i=0;i<=n;i++)
 {
  v[i]=0;
  ras[i]=inf;
  pred[i]=inf;
  for(int j=0;j<=n;j++)df[i][j]=-inf;
 }
 for(i=0;i<m;i++)
 {
  cin>>p0>>p1>>p2;
  df[p0][p1]=p2;
 }
 ras[l1]=0;
 pred[l1]=l1;
 Dijkstra(l1);
 int h=l2;
 pred[l1]=l1;
 pytb[0]=l2;
 ii=1;
 while(h!=l1)
 {
  pytb[ii]=pred[h];
  if(pred[h]==inf)
  {
   h=l1;
   ii=inf;
   cout<<" Net pyti "<<endl;
   break;
  }
  ii++;
  h=pred[h];
 }
 for(i=ii-1;i>=0 && ii!=inf ;i--)cout<<pytb[i]<<" ("<<ras[pytb[i]]<<") "<<endl;
 ee=clock();
 cout<<" time "<<ee-e<<endl;
 return 0;
}

Add a code snippet to your website: www.paste.org