Pagini recente » Cod sursa (job #2081868) | Cod sursa (job #560547) | Cod sursa (job #2973826) | Cod sursa (job #780684) | Cod sursa (job #2552898)
#include <bits/stdc++.h>
#define NMAX 100001
#define INF (1<<30)
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n, m, nodStart;
int dist[NMAX];
bool InCoada[NMAX];
vector < pair <int, int> > A[NMAX];
priority_queue < pair < int, int > >Q;
void citire()
{
fin>>n>>m;
for(int i = 1; i <= m; i++)
{
int x, y, cost; fin>>x>>y>>cost;
A[x].push_back({y, cost});
}
}
void dijkstra(int nodStart)
{
for(int i=1; i<=n; i++)
dist[i] = INF;
dist[nodStart] = 0;
Q.push({0, nodStart});
InCoada[nodStart] = true;
while(!Q.empty())
{
int a = Q.top().second;
Q.pop();
InCoada[a] = false;
for(auto k : A[a])
{
int Vecin = k.first; int Cost = k.second;
if(dist[Vecin] > dist[a] + Cost)
{
dist[Vecin] = dist[a] + Cost;
if(!InCoada[Vecin])
{
Q.push( {-dist[Vecin], Vecin});
InCoada[Vecin] = true;
}
}
}
}
for(int i=2; i<=n; i++)
fout<<(dist[i] != INF ? dist[i] : -1)<<' ';
}
int main()
{
citire();
dijkstra(1);
return 0;
}