Pagini recente » Cod sursa (job #2098335) | Cod sursa (job #24256) | Cod sursa (job #607911) | Cod sursa (job #190702) | Cod sursa (job #2513865)
#include <cstdio>
#include <vector>
#include <queue>
#define nod first
#define cost second
using namespace std;
const int INF = 2.e9;
const int NMAX = 50000;
typedef pair <int , int> ii;
typedef vector <ii> vii;
vii G[NMAX + 5];
int d[NMAX + 5];
priority_queue <ii , vii , greater<ii> > pq;
int main()
{
freopen("dijkstra.in" , "r" , stdin);
freopen("dijkstra.out" , "w" , stdout);
int n , m , x , y , z , i , j , dist;
ii temp;
scanf("%d%d" , &n , &m);
for(i = 1 ; i <= m ; i ++)
{
scanf("%d%d%d" , &x , &y , &z);
G[x].push_back(make_pair(y , z));
}
for(i = 2 ; i <= n ; i ++)
d[i] = INF;
pq.push(make_pair(1 , 0));
while(!pq.empty())
{
temp = pq.top();
pq.pop();
x = temp.nod;
dist = temp.cost;
if(dist > d[x])
continue;
for(j = 0 ; j < G[x].size() ; j ++)
{
y = G[x][j].nod;
z = G[x][j].cost;
if(d[y] > d[x] + z)
{
d[y] = d[x] + z;
pq.push(make_pair(y , d[y]));
}
}
}
for(i = 2 ; i <= n ; i ++)
{
if(d[i] == INF)
d[i] = 0;
printf("%d " , d[i]);
}
return 0;
}