Pagini recente » Cod sursa (job #233063) | Cod sursa (job #2550371) | Cod sursa (job #133235) | Cod sursa (job #186035) | Cod sursa (job #744911)
Cod sursa(job #744911)
#include<cstdio>
#include<queue>
#include<vector>
#define NMAX 50005
#define INF 1<<30
#define vecin first
#define cost second
using namespace std;
priority_queue<int,vector<int>,greater<int> >Q;
int N,M,D[NMAX];
vector<pair<int,int> >V[NMAX];
bool E[NMAX];
void citire()
{
int x,y,c;
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d%d",&N,&M);
for(int i = 0 ; i<M; i++)
{
scanf("%d%d%d",&x,&y,&c);
V[x].push_back(make_pair(y,c));
D[i%NMAX] = INF;
}
}
void DJ()
{
D[1] = 0;
Q.push(1);
E[1] = 1;
while(Q.size())
{
int nod = Q.top();
E[nod] = 0,Q.pop();
int i,l = V[nod].size();
for(i = 0 ; i<l;i++)
{
int y = V[nod][i].vecin , c = V[nod][i].cost;
if(D[y] > (D[nod] + c))
{
D[y] = D[nod] + c;
if(!E[y])
Q.push(y),E[y] = 1;
}
}
}
}
void afisare()
{
for(int i = 2 ; i<= N ; i++)
if(D[i] == INF)
printf("%d ",INF);
else
printf("%d ",D[i]);
}
int main()
{
citire();
DJ();
afisare();
return 0;
}