Pagini recente » Cod sursa (job #1867748) | Cod sursa (job #2696778) | Cod sursa (job #1791685) | Monitorul de evaluare | Cod sursa (job #2242234)
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
#include <queue>
#define dm 50005
#define inf 0x3f3f3f3f
#define x first
#define y second
#define mp make_pair
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int dist[dm];
vector <pair<int,int>> V[dm];
bool isVisited[dm];
int n, m, a, b, c;
struct comp{
bool operator()(int x, int y){
return dist[x] > dist[y];
}
};
priority_queue < int, vector <int>, comp> Q;
void dijkstra(int nodInceput)
{
for(int i = 1; i <= n; i++)
dist[i] = inf;
dist[nodInceput] = 0;
Q.push(nodInceput);
isVisited[nodInceput] = 1;
while(!Q.empty())
{
int actualNode = Q.top();
Q.pop();
for(size_t i = 0; i < V[actualNode].size(); i++)
{
int neighbor = V[actualNode][i].x;
int cost = V[actualNode][i].y;
if(dist[actualNode] + cost < dist[neighbor])
{
dist[neighbor] = dist[actualNode] + cost;
if(!isVisited[neighbor])
{
Q.push(neighbor);
isVisited[neighbor] = 1;
}
}
}
}
}
int main()
{
fin >> n >> m;
for(int i = 1; i <= m; i++)
{
fin >> a >> b >> c;
V[a].push_back(make_pair(b, c));
}
dijkstra(1);
for(int i = 2; i <= n; i++)
{
if(dist[i]!= inf)
{
fout << dist[i] << " ";
}
else fout << 0 << " ";
}
return 0;
}