Pagini recente » Cod sursa (job #199838) | Cod sursa (job #820364) | Cod sursa (job #2649129) | Cod sursa (job #2571192) | Cod sursa (job #2810669)
#include <iostream>
#include <vector>
#include <queue>
#include <climits>
std::vector<int>
distante_minime_dijkstra(const int src, const int n,
const std::vector<std::vector<std::pair<int, int>>>& adj)
{
std::vector<char> visited(n + 1, false);
std::vector<int> distance(n + 1, INT_MAX);
distance[src] = 0;
std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int>>,
std::greater<std::pair<int, int>>>
q;
q.push({0, src});
while(!q.empty())
{
const int a = q.top().second;
q.pop();
if(visited[a])
{
continue;
}
visited[a] = true;
for(auto& e : adj[a])
{
const int b = e.first;
const int w = e.second;
if(distance[a] + w < distance[b])
{
distance[b] = distance[a] + w;
q.push({distance[b], b});
}
}
}
return distance;
}
void solve_one()
{
int N, M;
std::cin >> N >> M;
std::vector<std::vector<std::pair<int, int>>> adj(N + 1);
for(int i = 0; i < M; ++i)
{
int a, b, w;
std::cin >> a >> b >> w;
adj[a].push_back({b, w});
}
auto dists = distante_minime_dijkstra(1, N, adj);
for(int i = 2; i <= N; ++i)
{
if(dists[i] == INT_MAX)
{
dists[i] = 0;
}
std::cout << dists[i] << ' ';
}
std::cout << '\n';
}
int main()
{
std::freopen("dijkstra.in", "r", stdin);
std::freopen("dijkstra.out", "w", stdout);
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
solve_one();
}