Pagini recente » Cod sursa (job #1340706) | Cod sursa (job #1805195) | Cod sursa (job #1585018) | Cod sursa (job #1935930) | Cod sursa (job #2513872)
#include <cstdio>
#include <vector>
#include <set>
#define cost first
#define nod second
using namespace std;
const int INF = 2.e9;
const int NMAX = 50000;
vector <pair <int , int> > G[NMAX + 5];
set <pair <int , int> > s;
int d[NMAX + 5];
int main()
{
freopen("dijkstra.in" , "r" , stdin);
freopen("dijkstra.out" , "w" , stdout);
int n , m , x , y , z , i , j , dist;
set <pair <int , int> >::iterator it;
scanf("%d%d" , &n , &m);
for(i = 1 ; i <= m ; i ++)
{
scanf("%d%d%d" , &x , &y , &z);
G[x].push_back(make_pair(z , y));
}
for(i = 2 ; i <= n ; i ++)
d[i] = INF;
s.insert(make_pair(0 , 1));
while(!s.empty())
{
it = s.begin();
s.erase(s.begin());
x = (*it).nod;
dist = (*it).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;
s.insert(make_pair(d[y] , y));
}
}
}
for(i = 2 ; i <= n ; i ++)
{
if(d[i] == INF)
d[i] = 0;
printf("%d " , d[i]);
}
return 0;
}