Pagini recente » Cod sursa (job #2555180) | Cod sursa (job #1943000) | Cod sursa (job #1702082) | Cod sursa (job #2705233)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("dijkstra.in");
ofstream out ("dijkstra.out");
vector < pair <int , int> > v[50001];
int viz[50001];
int dist[50001];
int n,m;
void dijkstra (int start)
{
set <pair < int , int> > seti;
seti.insert ({0, start});
dist[start] = 0;
viz[start] = 1;
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 (!viz[v[place][i].first])
{
viz[v[place][i].first] = 1;
dist[v[place][i].first] = cost + v[place][i].second;
seti.insert({dist[v[place][i].first], v[place][i].first});
}
else if (dist[place] + v[place][i].second < dist[v[place][i].first])
dist[v[place][i].first] = dist[place] + v[place][i].second ;
}
}
}
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;
}