Pagini recente » Cod sursa (job #1177516) | Cod sursa (job #2929251) | Cod sursa (job #805303) | Voteaza Zaharel | Cod sursa (job #1192420)
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
#define inf 5000000
#define Mmax 50001
#define F(i, EXP) for(register int i=0;(EXP);++i)
#define FU(i,EXP) for(unsigned int i=0;(EXP);++i)
struct punct{int x,c;};
vector< punct > a[Mmax];
vector<int > d(Mmax,inf) ;
queue<int> q;
int n,m,x,y,z,nod,cost,aux;
void dijkstra()
{q.push(1);
d[1]=0;
while(!q.empty())
{aux=q.front();q.pop();
FU(i,i<a[aux].size())
{cost=a[aux][i].c; nod=a[aux][i].x;
if(d[nod]>d[aux]+cost) {d[nod]=d[aux]+cost; q.push(nod);}
}
}
}
int main()
{freopen("dijkstra.in","rt",stdin);
freopen("dijkstra.out","wt",stdout);
scanf("%d%d",&n,&m);
punct aux1;
F(i,i<m) scanf("%d%d%d",&x,&y,&z), aux1.x=y, aux1.c=z, a[x].push_back(aux1);
dijkstra();
F(i,i<n-1) if(d[i+2]!=inf) printf("%d ",d[i+2]); else printf("0 ");
printf("\n");
return 0;
}