Pagini recente » Diferente pentru problema/drumuri3 intre reviziile 5 si 6 | Cod sursa (job #684984) | Diferente pentru happy-coding-2006/solutii intre reviziile 26 si 24 | Cod sursa (job #1784291) | Cod sursa (job #3215572)
#include <iostream>
#include <fstream>
#include <queue>
#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;
vector<bool> vizitat;
void distra(int startingNode)
{
priority_queue<ceva> q;
dist[startingNode] = 0;
q.push({startingNode, 0});
while(!q.empty())
{
ceva nod = q.top();
q.pop();
if(!vizitat[nod.nod])
{
vizitat[nod.nod] = true;
for(auto vecin : adj[nod.nod])
{
if(dist[vecin.nod] > dist[nod.nod] + vecin.cost)
{
dist[vecin.nod] = dist[nod.nod] + vecin.cost;
q.push({vecin.nod, dist[vecin.nod]});
}
}
}
}
}
int main()
{
fin>>n>>m;
adj.resize(n+1);
dist.resize(n+1, LONG_MAX);
vizitat.resize(n+1, false);
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]<<" ";
}