Pagini recente » Cod sursa (job #249957) | Profil anca0908041325 | Cod sursa (job #164550) | Cod sursa (job #2561443) | Cod sursa (job #2354789)
#include <bits/stdc++.h>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const int MAX = 5e4 + 5;
const int INF = 1E9 + 5;
int n, m;
struct Node
{
int distance, vertex;
Node(const int &distance, const int &vertex)
{
this->distance = distance;
this->vertex = vertex;
}
bool operator < (const Node &other) const
{
return this->distance > other.distance;
}
};
priority_queue<Node> pq;
vector<vector<Node> > graph;
void Read()
{
f >> n >> m;
graph.resize(n + 1);
for(int i = 1; i <= m; ++i)
{
int u, v, Dist;
f >> u >> v >> Dist;
graph[u].push_back({Dist, v});
}
}
void Solve()
{
vector<int> Dist (n + 1, INF);
pq.push({0, 1});
while(!pq.empty())
{
int vertex = pq.top().vertex;
int vertexDistance = pq.top().distance;
pq.pop();
if(Dist[vertex] != INF) continue;
Dist[vertex] = vertexDistance;
for(auto& child : graph[vertex])
{
if(Dist[child.vertex] == INF)
pq.push({vertexDistance + child.distance, child.vertex});
}
}
for(int i = 2; i <= n; ++i)
g << (Dist[i] == INF ? 0 : Dist[i]) << " ";
g << "\n";
}
int main()
{
Read();
Solve();
return 0;
}