Pagini recente » Borderou de evaluare (job #1623421) | Cod sursa (job #1011306) | Cod sursa (job #119079) | Cod sursa (job #296149) | Cod sursa (job #3337037)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
vector<vector<pair<int, int>>> graf;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
vector<int> viz;
vector<int> tata;
vector<int> d;
const int inf = 1e9;
int N, M;
void dijkstra(int x)
{
d[x] = 0;
pq.push({d[x], x});
while(!pq.empty())
{
int cost, nod;
cost = pq.top().first;
nod = pq.top().second;
pq.pop();
if(viz[nod] == 0)
{
for(auto& vec : graf[nod])
{
if(d[vec.second] > vec.first + cost)
{
d[vec.second] = vec.first + cost;
tata[vec.second] = nod;
pq.push({d[vec.second], vec.second});
}
}
viz[nod] = 1;
}
}
}
int main()
{
fin>>N>>M;
graf.resize(N+1);
viz.assign(N+1, 0);
d.assign(N+1, inf);
tata.assign(N+1, 0);
for(int i=1; i<=M; i++)
{
int x, y, c;
fin>>x>>y>>c;
graf[x].push_back({c, y});
}
dijkstra(1);
for(int i=1; i<=N; i++)
if(d[i] != 0)
fout<<d[i]<<' ';
return 0;
}