Mai intai trebuie sa te autentifici.
Cod sursa(job #2116738)
Utilizator | Data | 27 ianuarie 2018 21:49:53 | |
---|---|---|---|
Problema | Algoritmul lui Dijkstra | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.08 kb |
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
#define lim 50010
#define inf 2e9
int n, m, cost;
int path[lim],nod;
bool viz[lim];
vector <pair <int, int>> G[lim];
priority_queue <pair <int, int>> q;
int main()
{
int x,y,c;
fin>>n>>m;
for (int i=1; i<=m; i++)
{
fin>>x>>y>>c;
G[x].push_back({y,c});
}
for (int i=2; i<=n; i++) path[i]=inf;
q.push({0,1});
while (!q.empty())
{
nod=q.top().second;
cost=q.top().first;
q.pop();
if (viz[nod]) continue;
viz[nod]=1;
path[nod]=-cost;
for (auto it:G[nod])
if (path[it.first] > path[nod] + it.second)
{
path[it.first] = path[nod] + it.second;
q.push({-path[it.first], it.first});
}
}
for (int i=2; i<=n; i++)
{
if (path[i]==inf) path[i]=0;
fout<<path[i]<<' ';
}
fout.close();
return 0;
}