Pagini recente » Cod sursa (job #2144791) | Cod sursa (job #417414) | Cod sursa (job #1685319) | Cod sursa (job #2810930) | Cod sursa (job #2573531)
#include <bits/stdc++.h>
#define oo 0x3f3f3f3f
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n, m;
int x, y, c;
vector<pair<int, int>> graf[50005];
int dist[50001];
void Read()
{
f>>n>>m;
for(int i = 1;i <= m;++i)
{
f>>x>>y>>c;
graf[x].push_back({y, c});
}
}
void Dijkstra()
{
for(int i = 1;i <= n;++i)
dist[i] = oo;
dist[1] = 0;
set<pair<int,int>> h;
h.insert({0, 1});
while(!h.empty())
{
int nod = h.begin() -> second;
h.erase(h.begin());
for(vector<pair<int,int>>::iterator it = graf[nod].begin();it != graf[nod].end();++it)
{
int vecin = (*it).first;
int cost = (*it).second;
if(dist[vecin] > dist[nod] + cost)
{
if(dist[vecin] != oo)
h.erase(h.find({dist[vecin], vecin}));
dist[vecin] = dist[nod] + cost;
h.insert({dist[vecin], vecin});
}
}
}
for(int i = 2;i <= n;++i)
g<<dist[i]<<" ";
g.close();
f.close();
}
int main()
{
Read();
Dijkstra();
return 0;
}