Pagini recente » Cod sursa (job #1887086) | Cod sursa (job #3274991) | Cod sursa (job #3228102) | Cod sursa (job #2110036) | Cod sursa (job #1500160)
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <queue>
#define inf 0x7FFF
#define nmax 50005
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct element
{long x,c;};
element *a[nmax];
long d[nmax],m[nmax],h[nmax],nr=0;
void push(long x)
{long tata,fiu;
h[++nr]=x; fiu=nr; tata=nr/2;
while(tata>0)
if(d[h[tata]]>d[x])
{h[fiu]=h[tata];
fiu=tata;
tata/=2;
}else break;
h[fiu]=x;
}
long top()
{long x,tata,fiu,v=h[1];
h[1]=h[nr];nr--;
x=h[1];
tata=1;fiu=2*tata;
while(fiu<=nr)
{if(fiu<nr && d[h[fiu+1]]<d[h[fiu]])fiu++;
if(d[x]>d[h[fiu]])
{h[tata]=h[fiu];
tata=fiu;
fiu*=2;
}
else break;
}
h[tata]=x;
return v;}
long hempty()
{
return nr==0;
}
int main()
{long x,y,c,n,nri,i,j,vf,dmin;
fin>>n>>nri;
for(x=1;x<=n;x++)
{a[x]=(element*)realloc(a[x],sizeof(element));
a[x][0].x=0;}
for(i=1;i<=nri;i++)
{ fin>>x>>y>>c;
a[x][0].x++;
a[x]=(element*)realloc(a[x],(a[x][0].x+1)*sizeof(element));
a[x][a[x][0].x].x=y; a[x][a[x][0].x].c=c;
a[y][0].x++;
a[y]=(element*)realloc(a[y],(a[y][0].x+1)*sizeof(element));
a[y][a[y][0].x].x=x; a[y][a[y][0].x].c=c;
}
for(i=1;i<=n;i++)d[i]=inf;
d[1]=0;
push(1);
while(!hempty())
{
vf=top();
for(i=1;i<=a[vf][0].x;i++)
if(d[a[vf][i].x]> d[vf]+a[vf][i].c)
{d[a[vf][i].x]= d[vf]+a[vf][i].c;
push(a[vf][i].x);
}
}
for(i=2;i<=n;i++)
if(d[i]!=inf)fout<<d[i]<<' ';
else fout<<0<<' ';
}