Pagini recente » Cod sursa (job #2044232) | Monitorul de evaluare | Cod sursa (job #2770614) | Statistici vladCristianoRonaldo (vladneagu) | Cod sursa (job #2601540)
#include<cstdio>
#include<vector>
#include<queue>
const int NMAX = 50000;
const int INF = 2000000000;
struct drum
{
int dest , cost;
};
int n;
std ::vector<drum>v[NMAX + 1];
int D[NMAX + 1];
bool inQueue[NMAX + 1];
struct helper
{
bool operator()(int x , int y)
{
return D[x] > D[y];
}
};
std ::priority_queue<int , std :: vector<int> ,helper> q;
void dijkstra(int start)
{
for(int i = 1; i <= n ; i ++)
D[i] = INF;
D[start] = 0;
q.push(start);
inQueue[start] = 1;
while(q.empty() == false)
{
int thisNode = q.top();
q.pop();
inQueue[thisNode] = 0;
for(int i = 0 ; i < v[thisNode].size() ; i ++)
{
int Vecin = v[thisNode][i].dest;
int Cost = v[thisNode][i].cost;
if(D[thisNode] + Cost < D[Vecin])
{
D[Vecin] = D[thisNode] + Cost;
if(inQueue[Vecin] == 0){
q.push(Vecin);
inQueue[Vecin] = 1;
}
}
}
}
}
int main()
{
freopen("dijkstra.in" , "r" , stdin);
freopen("dijkstra.out" , "w" , stdout);
int m, a, b, c;
scanf("%d%d" , &n , &m);
for(int i = 1; i <= m ; i ++)
{
scanf("%d%d%d" , &a, &b , &c);
v[a].push_back({b , c});
}
dijkstra(1);
for(int i = 2; i <= n ; i ++){
if(D[i] != INF)
printf("%d ", D[i]);
else
printf("0 ");
}
return 0;
}