Pagini recente » Cod sursa (job #2076436) | Profil Smsp._. | Cod sursa (job #1763965) | Cod sursa (job #961266) | Cod sursa (job #2574803)
#include <bits/stdc++.h>
#define N_MAX 50005
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int N, M;
vector < pair < int, int > > G[N_MAX];
priority_queue < pair < int, int >, vector < pair < int, int > >, greater < pair < int, int > > > PQ;
int vis[N_MAX], D[N_MAX];
void Dijkstra()
{
int currNode = PQ.top().second;
int currCost = PQ.top().first;
PQ.pop();
while (vis[currNode] == 1 && PQ.size())
{
currNode = PQ.top().second;
currCost = PQ.top().first;
PQ.pop();
}
vis[currNode] = 1;
for (pair < int, int > node: G[currNode])
if (vis[node.second] == 0 && D[node.second] > currCost + node.first)
{
D[node.second] = currCost + node.first;
PQ.push(make_pair(D[node.second], node.second));
}
if (PQ.size())
Dijkstra();
}
int main()
{
fin >> N >> M;
for (int i = 1; i <= M; i++)
{
int x, y, c;
fin >> x >> y >> c;
G[x].push_back(make_pair(c, y));
}
for (int i = 1; i <= N; i++)
D[i] = INT_MAX / 2;
D[1] = 0;
PQ.push(make_pair(0, 1));
Dijkstra();
for (int i = 2; i <= N; i++)
fout << (D[i] == INT_MAX / 2 ? 0 : D[i]) << " ";
return 0;
}