Pagini recente » Cod sursa (job #2610386) | Cod sursa (job #966008) | Cod sursa (job #1933052) | Cod sursa (job #2380506) | Cod sursa (job #3002394)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 5e4;
vector< pair<int, int> > graph[NMAX];
int dist[NMAX];
bool vis[NMAX];
priority_queue< pair<int, int>, vector< pair<int, int> >, greater< pair<int, int> > > pq;
void dijkstra(int node) {
dist[node] = 0;
pq.push( {0, node} );
while(!pq.empty()) {
int x = pq.top().second;
int d = pq.top().first;
pq.pop();
if(!vis[x]) {
vis[x] = true;
for(auto neighbour : graph[x]) {
if(dist[x] + neighbour.first < dist[neighbour.second]) {
dist[neighbour.second] = dist[x] + neighbour.first;
pq.push( {dist[neighbour.second], neighbour.second} );
}
}
}
}
}
int main() {
FILE *fin, *fout;
fin = fopen("dijkstra.in", "r");
fout = fopen("dijkstra.out", "w");
int n, m;
fscanf(fin, "%d%d", &n, &m);
for(int i = 0; i < m; i++) {
int a, b, c;
fscanf(fin, "%d%d%d", &a, &b, &c);
graph[a - 1].push_back( {c, b - 1} );
}
for(int i = 0; i < n; i++)
dist[i] = 2e9;
dijkstra(0);
for(int i = 1; i < n; i++)
if(dist[i] == 2e9)
fprintf(fout, "0 ");
else fprintf(fout, "%d ", dist[i]);
fclose(fin);
fclose(fout);
return 0;
}