Pagini recente » Cod sursa (job #2481886) | Cod sursa (job #1411183) | Cod sursa (job #2741522) | Cod sursa (job #2339759) | Cod sursa (job #2705208)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("dijkstra.in");
ofstream out ("dijkstra.out");
vector <pair <int , int > > v[50001];
int N, M;
int dist[50001];
int dad[50001];
void dijkstra (int start)
{
set <pair <int , int > > seti;
dist[start] = 0;
for (int i = 0; i < v[start].size(); ++i)
{
pair <int , int> pp = make_pair(v[start][i].second, v[start][i].first);
seti.insert(pp);
dad[v[start][i].first] = start;
}
while (!seti.empty())
{
int cost = (*seti.begin()).first;
int place = (*seti.begin()).second;
int tata = dad[place];
seti.erase(seti.begin());
if (dist[place] == -1)
{
dist[place] = dist[tata] + cost;
for (int i = 0; i<v[place].size();++i)
{
if (dist[v[place][i].first] == -1)
{
dad[v[place][i].first] = place;
seti.insert({v[place][i].second,v[place][i].first});
}
}
}
if (dist[tata] + cost < dist[place])
dist[place] = dist[tata] + cost;
}
}
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;
dijkstra(1);
for (int i = 2; i<=N; ++i)
if (dist[i] == -1)
out << 0 << ' ';
else
out << dist[i] << ' ';
return 0;
}