Pagini recente » Cod sursa (job #205507) | Cod sursa (job #1030228) | Cod sursa (job #2250738) | Cod sursa (job #490277) | Cod sursa (job #3215565)
#include <iostream>
#include <fstream>
#include <set>
#include <vector>
#include <climits>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct ceva{
int nod;
long long cost;
bool operator<(const ceva &temp) const
{
return cost > temp.cost;
}
};
int n, m;
vector<vector<ceva> > adj;
vector<long long> dist;
void distra(int startingNode)
{
set<ceva> q;
dist[1] = 0;
q.insert({1, 0});
while(!q.empty())
{
ceva nod = *q.begin();
q.erase(q.begin());
for(auto vecin : adj[nod.nod])
{
if(dist[vecin.nod] > dist[nod.nod] + vecin.cost)
{
q.erase({vecin.nod, dist[vecin.nod]});
dist[vecin.nod] = dist[nod.nod] + vecin.cost;
q.insert({vecin.nod, dist[vecin.nod]});
}
}
}
}
int main()
{
fin>>n>>m;
adj.resize(n+1);
dist.resize(n+1, LONG_MAX);
for(int i = 1; i <= m;i++)
{
int x, y, cost;
fin>>x>>y>>cost;
adj[x].push_back({y, cost});
}
distra(1);
for(int i = 2;i<=n;i++)
if(dist[i] == LONG_MAX)
fout<<0<<" ";
else fout << dist[i]<<" ";
}