Pagini recente » Cod sursa (job #2580064) | Cod sursa (job #1369918) | Cod sursa (job #605856) | Cod sursa (job #2332565) | Cod sursa (job #3225849)
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
#define Inf 0x3f3f3f3f
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
using PI = pair<int , int>;
int n , m , x , y , p , D[100001] , w;
vector <PI> G[100001];
void dijkstra(int nod)
{
priority_queue < PI , vector<PI> , greater<PI> > Q;
D[nod] = 0;
Q.push({0 , nod});
while(!Q.empty())
{
x = Q.top().first;
y = Q.top().second;
Q.pop();
if(x > D[y])
continue;
for(size_t q = 0;q<G[y].size();++q)
{
int nodnou = G[y][q].first;
int costnou = G[y][q].second;
if(D[nodnou] > D[y] + costnou)
{
D[nodnou] = D[y] + costnou;
Q.push({D[nodnou] , nodnou});
}
}
}
}
int main()
{
cin >> n >> m ;
for(int i = 1 ; i <= m ; ++i)
{
cin >> x >> y >> w;
G[x].push_back({y , w});
}
for(int i = 1 ; i <= n ; i++)
D[i] = Inf;
dijkstra(1);
for(int i = 2 ; i <= n ; i++)
if(D[i] == Inf)
cout <<"0"<<" ";
else
cout << D[i] << " ";
return 0;
}