Pagini recente » Cod sursa (job #2381676) | Cod sursa (job #1031833) | Cod sursa (job #2933001) | Cod sursa (job #2957548) | Cod sursa (job #1997216)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream is("dijkstra.in");
ofstream os("dijkstra.out");
#define INF 0x3f3f3f3f
int x, y, cost;
vector<int> dist;
vector<vector<pair<int,int>>> graph;
int N, M;
struct CMP{
bool operator() (int A, int B)
{
return dist[A] > dist[B];
}
};
priority_queue<int, vector<int>, CMP> nodes;
void Dijkstra( int vertex );
int main()
{
is >> N >> M;
dist.resize(N+1, INF);
graph.resize(N+1);
for( int i = 0; i < M; i++ )
{
is >> x >> y >> cost;
graph[x].push_back({y, cost});
}
Dijkstra(1);
for( int i = 2; i <= N; i++ )
if( dist[i] == INF )
os << "0 ";
else
os << dist[i] << ' ';
is.close();
os.close();
return 0;
}
inline void Dijkstra( int vertex )
{
dist[vertex] = 0;
nodes.push(vertex);
while( ! nodes.empty() )
{
vertex = nodes.top();
nodes.pop();
for( const auto& i : graph[vertex] )
if( dist[i.first] > dist[vertex] + i.second )
{
dist[i.first] = dist[vertex] + i.second;
nodes.push(i.first);
}
}
}