Pagini recente » Cod sursa (job #1125567) | Cod sursa (job #54655) | Cod sursa (job #3151983) | Cod sursa (job #2155078) | Cod sursa (job #2133981)
#include <cstdio>
#include <list>
#include <queue>
using namespace std;
struct edge
{
int v, weight;
};
struct compare
{
bool operator()(edge &x, edge &y)
{
return x.weight > y.weight;
}
};
int vertices, edges, u, v, weight;
int dist[50001]; bool visited[50001];
const int infinity = 25000001;
vector<edge> adj[50001];
void Dijkstra(int source){
for(int node = 1; node <= vertices; node++)
{
dist[node] = infinity;
}
dist[source] = 0;
priority_queue<edge, vector<edge>, compare> Q;
Q.push({source, dist[source]});
while(Q.empty() == false){
int u = Q.top().v; Q.pop();
if(visited[u] == false)
{
visited[u] = true;
for(edge i : adj[u])
{
int v = i.v, weight = i.weight;
if(dist[v] > dist[u] + weight)
{
dist[v] = dist[u] + weight;
Q.push({v, dist[v]});
}
}
}
}
}
int main(){
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%d %d", &vertices, &edges);
for(int i = 1; i <= edges; i++)
{
scanf("%d %d %d", &u, &v, &weight);
adj[u].push_back({v, weight});
}
Dijkstra(1);
for(int node = 2; node <= vertices; node++)
{
printf("%d ", (dist[node] == infinity) ? 0 : dist[node]);
}
return 0;
}