Pagini recente » Cod sursa (job #110794) | Cod sursa (job #2383627) | Cod sursa (job #2283955) | Cod sursa (job #846240) | Cod sursa (job #2698320)
#include <iostream>
#include <queue>
#include <fstream>
#include <vector>
using namespace std;
#define MAX_N 50000
#define INF INT_MAX
typedef pair<int,int> pereche;
int main()
{
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
priority_queue<pereche, vector<pereche>, greater<pereche>> coada;
vector<pereche> adj[MAX_N];
int n, m, dist[MAX_N], x, y, c, i, start;
f >> n >> m >> start;
for (i = 1; i <= m; i++)
{
f >> x >> y >> c;
adj[x].push_back(make_pair(c,y));
adj[y].push_back(make_pair(c,x));
}
for (i = 1; i <= n; i++)
dist[i] = INF;
dist[start] = 0;
coada.push({0, start});
while (!coada.empty())
{
x = coada.top().second;
coada.pop();
for (pereche i : adj[x])
{
y = i.second;
c = i.first;
if (dist[y] > dist[x] + c)
{
dist[y] = dist[x] + c;
coada.push({dist[y], y});
}
}
}
for (i = 1; i <= n; i++)
{
if (dist[i] != INF)
g << dist[i] << ' ';
else
g << -1 << ' ';
}
return 0;
}