Pagini recente » Cod sursa (job #1067973) | Cod sursa (job #2073421) | Cod sursa (job #1166539) | Cod sursa (job #2500582) | Cod sursa (job #2681338)
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
#include <utility>
#include <list>
#include <queue>
#include <functional>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int inf = 100000;
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
int n,m;
int tata[50001],viz[50001],dist[50001];
list <pair<int,int>> ad[50001];
int s, length;
void initialize()
{
s = 1;
for(int i = 1; i <= n; i ++)
{
tata[i] = 0;
viz[i] = 1;
dist[i] = inf;
}
q.push(make_pair(0,s));
dist[s] = 0;
}
int main()
{
fin >> n >> m;
for( int i = 1; i <= m ; i++)
{
int a,b,c;
fin >> a >> b >> c;
ad[a].push_back(make_pair(b,c));
ad[b].push_back(make_pair(a,c));
}
///initializam nodul de start si costul arborelui
initialize();
while(!q.empty())
{
///gasim nodul
pair <int,int> least = q.top();
int node = least.second;
///"stergem" nodul
q.pop();
///evitam ciclurile
if(viz[node] == 0)
continue;
viz[node] = 0;
/// actualizam vectorul dist si tata pentru vecinii lui node
for(auto &edge: ad[node])
{
if(dist[edge.first] > edge.second + dist[node])
{
dist[edge.first] = edge.second + dist[node];
tata[edge.first] = node;
q.push(make_pair(dist[edge.first],edge.first));
}
}
}
for(int i = 2; i <=n ; i++)
if(dist[i] == inf)
fout<<0<<" ";
else
fout<<dist[i]<<" ";
return 0;
}