Pagini recente » Cod sursa (job #2251756) | Cod sursa (job #2469946) | Cod sursa (job #303083) | Cod sursa (job #2500604) | Cod sursa (job #1762462)
#include <stdio.h>
#include <vector>
#include <queue>
#include <ctype.h>
#include <stdlib.h>
#define inf 100000000
using namespace std;
int n,m,i,x,y,c,*d;
char *b;
vector<pair<int,int> >G[50001];
priority_queue<int, vector<int>, greater<int> >Q;
void citire()
{
int l,j,i;
fseek(stdin,0,SEEK_END);
l=ftell(stdin);
rewind(stdin);
b=(char*) malloc((l+1)*sizeof(char));
fread(b,sizeof(char),l,stdin);
for (j=0;isdigit(b[j]);j++) n=n*10+b[j]-'0';
for (++j;isdigit(b[j]);j++) m=m*10+b[j]-'0';
for (i=1;i<=m;i++)
{
x=y=c=0;
for (++j;isdigit(b[j]);j++) x=x*10+b[j]-'0';
for (++j;isdigit(b[j]);j++) y=y*10+b[j]-'0';
for (++j;isdigit(b[j]);j++) c=c*10+b[j]-'0';
G[x].push_back(make_pair(y,c));
}
free(b);
d=(int*) calloc(n+1,sizeof(int));
}
void dijkstra()
{
int i,x,y;
for (i=2;i<=n;i++) d[i]=inf;
Q.push(1);
while (!Q.empty())
{
x=Q.top();
Q.pop();
for (i=0;i<G[x].size();i++)
{
y=G[x][i].first;
if (d[y]>d[x]+G[x][i].second)
{
d[y]=d[x]+G[x][i].second;
Q.push(y);
}
}
}
}
int main()
{
freopen ("dijkstra.in","r",stdin);
freopen ("dijkstra.out","w",stdout);
citire();
dijkstra();
for (i=2;i<=n;i++)
if (d[i]!=inf) printf("%i ",d[i]);
else printf("0 ");
fclose(stdin);
fclose(stdout);
return 0;
}