Pagini recente » Cod sursa (job #2038020) | Cod sursa (job #2906520) | Cod sursa (job #817232) | Cod sursa (job #1016951) | Cod sursa (job #160899)
Cod sursa(job #160899)
#include <stdio.h>
#include <vector>
#define inf 0x3f3f3f3f
using namespace std;
int n,m,x,y,c,b[50010],h[65600],size[50010],z,p,q;
vector <int> a[50010];
vector <int> cost[50010];
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d%d",&n,&m);
int i,j;
for (i=1; i<=n; ++i)
{
scanf("%d%d%d",&x,&y,&c);
a[x].push_back(y);
cost[x].push_back(c);
size[x]=a[x].size();
}
b[1]=0;
for (i=2; i<=n; ++i) { b[i]=inf;h[i]=i; }
h[1]=1;
z=n;
for (i=1; i<=n; ++i)
{
for (j=0; j<size[h[1]]; ++j)
if (b[h[1]]+cost[h[1]][j]<b[a[h[1]][j]]) b[a[h[1]][j]]=b[h[1]]+cost[h[1]][j];
h[1]=h[z--];
p=1;
q=1;
while (q==0)
{
q=0;
if (b[h[p]]>b[h[p*2]])
{
q=1;
x=h[p];
h[p]=h[p*2];
h[p*2]=x;
p=p*2;
}
else
if (b[h[p]]>b[h[p*2+1]])
{
q=1;
x=h[p];
h[p]=h[p*2+1];
h[p*2+1]=x;
p=p*2+1;
}
}
}
for (i=2; i<=n; ++i)
{
if (b[i]==inf) { printf("0 "); continue; }
printf("%d ",b[i]);
}
return 0;
}