Mai intai trebuie sa te autentifici.
Cod sursa(job #2838644)
Utilizator | Data | 24 ianuarie 2022 12:55:23 | |
---|---|---|---|
Problema | Algoritmul lui Dijkstra | Scor | 20 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.27 kb |
#include <bits/stdc++.h>
#define inf (1 << 30)
using namespace std;
int n,m,p,x,y,cost,d[100001],f[100001];
struct comparaDistante
{
bool operator() (int x,int y)
{
return d[x]>d[y];
}
};
priority_queue<int, vector<int>, comparaDistante> Coada;
vector<pair<int,int>> G[100001];
int main()
{
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>x>>y>>cost;
G[x].push_back(make_pair(y,cost));
}
for(int i=1;i<=n;i++)
{
d[i]=inf;
}
d[1]=0;
Coada.push(1);
f[1]=1;
while(!Coada.empty())
{
int nodCurent = Coada.top();
Coada.pop();
f[nodCurent]=0;
for(size_t i=0;i<G[nodCurent].size();i++)
{
int vecin = G[nodCurent][i].first;
int cost = G[nodCurent][i].second;
if(d[nodCurent]+cost < d[vecin])
{
d[vecin]=d[nodCurent]+cost;
if(!f[vecin])
{
Coada.push(vecin);
f[vecin]=1;
}
}
}
}
for(int i=1;i<=n;i++)
{
if(d[i]!=0)
cout<<d[i]<<" ";
}
return 0;
}