Pagini recente » Cod sursa (job #2266273) | Cod sursa (job #641702) | Cod sursa (job #2712400) | Cod sursa (job #2539386) | Cod sursa (job #2705242)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("dijkstra.in");
ofstream out ("dijkstra.out");
vector < pair <int , int> > v[50001];
int dist[50001];
int n,m;
void dijkstra (int start)
{
set <pair < int , int> > seti;
seti.insert ({0, start});
dist[start] = 0;
while (!seti.empty())
{
int place = (*seti.begin()).second;
int cost = (*seti.begin()).first;
seti.erase(seti.begin());
for (int i = 0; i < v[place].size(); ++i)
{
if (dist[place] + v[place][i].second < dist[v[place][i].first])
{
if (dist[v[place][i].first] != 1<<30)
seti.erase(seti.find(make_pair(dist[v[place][i].first], v[place][i].first)));
dist[v[place][i].first] = cost + v[place][i].second;
seti.insert({dist[v[place][i].first], v[place][i].first});
}
}
}
}
int main ()
{
in >> n >> m;
for (int i = 1;i<=m;++i)
{
int a,b,c;
in>>a>>b>>c;
v[a].push_back({b,c});
}
for (int i = 1; i<=n; ++i)
dist[i] = 1<<30;
dijkstra(1);
for (int i = 2;i<=n;++i)
{
if (dist[i]==1<<30)
out<< 0 << ' ';
else
out << dist[i] << ' ';
}
return 0;
}