Pagini recente » Cod sursa (job #1648917) | Cod sursa (job #827072) | Cod sursa (job #1587920) | Cod sursa (job #2058935) | Cod sursa (job #2940717)
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#include <queue>
#define INF 0x3f3f3f3f
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
int n, m;
vector <vector<pair<int, int>>> v;
void citire(){
int x, y, dist;
fin >> n >> m;
v.resize(m + 1);
for(int i = 0; i < m; i++){
fin >> x >> y >> dist;
v[x].push_back(make_pair(dist, y));
}
}
void dijkstra(int s)
{
vector<int> d(n + 1, INF);
d[s] = 0;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
q.push(make_pair(d[s], s));
while(!q.empty())
{
pair<int, int> nod = q.top();
q.pop();
for(int i = 0; i < v[nod.second].size(); i++)
{
if(d[nod.second] + v[nod.second][i].first < d[v[nod.second][i].second])
{
d[v[nod.second][i].second] = d[nod.second] + v[nod.second][i].first;
q.push(make_pair(d[v[nod.second][i].second], v[nod.second][i].second));
}
}
}
for(int i = 2; i <= n; i++)
{
if(d[i] != INF)
fout << d[i] << ' ';
else
fout << 0 << ' ';
}
}
int main() {
citire();
dijkstra(1);
return 0;
}