Pagini recente » Cod sursa (job #269336) | Cod sursa (job #2626308) | Cod sursa (job #719452) | Cod sursa (job #1091970) | Cod sursa (job #2692686)
#include<iostream>
#include<vector>
#include<list>
#include<queue>
#include<fstream>
# define INF 0x3f3f3f3f
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
list<pair<int,int>> graf[250005];
int n, m;
void Read()
{
int i, x, y, z;
f >> n >> m;
for(i = 1; i <= m; i++)
{
f >> x >> y >> z;
graf[x].push_back(make_pair(y, z));
}
}
void Dijkstra(int src)
{
priority_queue< pair<int,int>, vector <pair<int,int>> , greater<pair<int,int>> > pq;
//vector<int> distance(n + 1, 10000);
int distance[50005];
for(int i= 0; i <= n+1; i++)
distance[i] = INF;
pq.push(make_pair(0,src));
distance[src] = 0;
while(!pq.empty())
{
int nod = pq.top().second;
pq.pop();
list< pair<int, int> >::iterator it;
for(it = graf[nod].begin(); it != graf[nod].end(); ++it)
{
int x = (*it).first;
int weight = (*it).second;
if(distance[x] > distance[nod] + weight)
{
distance[x] = distance[nod] + weight;
pq.push(make_pair(distance[x], x));
}
}
}
for(int i = 2; i <= n; i++)
g << distance[i] << " ";
}
int main()
{
Read();
Dijkstra(1);
return 0;
}