Pagini recente » Cod sursa (job #1126666) | Cod sursa (job #576369) | Cod sursa (job #209267) | Cod sursa (job #2652179) | Cod sursa (job #3197081)
#include <iostream>
#include <vector>
#include <climits>
#include<unordered_map>
#include <algorithm>
#include <set>
#include<string>
#include<map>
#include<queue>
#include<cmath>
#include<fstream>
#include<list>
#include<iomanip>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
#define ll long long
typedef pair<int, int> iPair;
class Graph {
int V;
list<iPair>* adj;
public:
Graph(int V) {
this->V = V;
adj = new list<iPair>[V];
}
void addEdge(int u, int v, int w) {
adj[u].push_back({ v, w });
}
void shortestPath(int src) {
priority_queue <iPair, vector<iPair>, greater<iPair>>pq;
vector<int>dist(this->V, INT_MAX);
pq.push({ 0, src });
dist[src] = 0;
while (!pq.empty()) {
int u = pq.top().second;
pq.pop();
list<iPair>::iterator i;
for (i = adj[u].begin(); i != adj[u].end(); i++) {
int v = (*i).first;
int weight = (*i).second;
if (dist[v] > dist[u] + weight) {
dist[v] = dist[u] + weight;
pq.push({ dist[v], v });
}
}
}
for (int i = 1; i < V; i++) {
if (dist[i] == INT_MAX)dist[i] = 0;
out << dist[i] << " ";
}
}
};
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, m;
in >> n >> m;
Graph g(n);
while (m--) {
int u, v, w;
in >> u >> v >> w;
g.addEdge(u - 1, v - 1, w);
}
g.shortestPath(0);
}