Pagini recente » Cod sursa (job #210803) | Cod sursa (job #2667761) | Cod sursa (job #2648603) | Cod sursa (job #1615776) | Cod sursa (job #2356310)
#include <bits/stdc++.h>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const int INF = 1e9 + 5;
struct Node
{
int dist, vertex;
Node(const int &dist, const int &vertex)
{
this->dist = dist;
this->vertex = vertex;
}
bool operator <(const Node &other) const
{
return this->dist > other.dist;
}
};
priority_queue<Node> pq;
vector<vector<Node> > graph;
int n, m;
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().dist;
pq.pop();
if(dist[vertex] != INF)
continue;
dist[vertex] = vertexDistance;
for(auto &child : graph[vertex])
{
if(dist[child.vertex] == INF)
pq.push({vertexDistance + child.dist, child.vertex});
}
}
for(int i = 2; i <= n; ++i)
g << (dist[i] == INF ? 0 : dist[i]) << " ";
}
int main()
{
Read();
Solve();
return 0;
}