Pagini recente » Cod sursa (job #1684754) | Cod sursa (job #1373708) | Cod sursa (job #2769728) | Cod sursa (job #2110666) | Cod sursa (job #2749856)
#include <fstream>
#include <set>
#include <vector>
#define lim 50000
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
const int INF = 2e9;
vector<pair<int, int>> v[lim+5]; //first->nod, second->cost
int viz[lim+5], dist[lim+5];
int n, m;
void Dijkstra(int sursa)
{
for(int i=1; i<=n; i++)
dist[i] = INF;
set<pair<int, int>> s; //first -> dist[nod], second -> nod
dist[sursa] = 0;
s.insert({0, sursa});
while(!s.empty()) //sau while(s.size()>0)
{
int nod = s.begin()->second;
s.erase(s.begin());
if(viz[nod]==0)
{
viz[nod] = 1;
for(auto& i : v[nod])
{
int vecin = i.first;
int cost = i.second;
if(dist[nod] + cost < dist[vecin])
{
dist[vecin] = dist[nod] + cost;
s.insert({dist[vecin], vecin});
}
}
}
}
}
int main()
{
in>>n>>m;
for(int i=1; i<=m; i++)
{
int x, y, c;
in>>x>>y>>c;
v[x].push_back({y, c});
v[y].push_back({x, c});
}
Dijkstra(1);
for(int i=2; i<=n; i++)
{
if(dist[i] != INF) out<<dist[i]<<' ';
else out<<"0 ";
}
return 0;
}