Pagini recente » Cod sursa (job #753748) | Cod sursa (job #412035) | Cod sursa (job #1744305) | Cod sursa (job #43363) | Cod sursa (job #2441920)
#include <bits/stdc++.h>
#define N 50005
#define oo INT_MAX
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
int n, m, p, cost[N];
bool gasit[N];
vector < pair <int, int> > L[N];
struct cmp
{
bool operator() (int x, int y)
{
return cost[x] > cost[y];
}
};
priority_queue < int, vector <int>, cmp> Q;
void Citire()
{
int a, b, c;
fin >> n >> m;
for (int i = 1; i <= m; i++)
{
fin >> a >> b >> c;
L[a].push_back(make_pair(b, c));
}
}
void Dijkstra()
{
for (int i = 1; i <= n; i++)
cost[i] = oo;
cost[1] = 0;
gasit[1] = 1;
Q.push(1);
while (!Q.empty())
{
int nod_curr = Q.top();
Q.pop();
gasit[nod_curr] = 0;
for (unsigned int i = 0; i < L[nod_curr].size(); i++)
{
int vecin = L[nod_curr][i].first;
int sum = L[nod_curr][i].second;
if (cost[nod_curr] + sum < cost[vecin])
{
cost[vecin] = cost[nod_curr] + sum;
if (!gasit[vecin])
{
Q.push(vecin);
gasit[vecin] = 1;
}
}
}
}
}
void Afisare()
{
for (int i = 2; i <= n; i++)
if (cost[i] != oo)
fout << cost[i] << " ";
else fout << 0 << " ";
}
int main()
{
Citire();
Dijkstra();
Afisare();
return 0;
}