Pagini recente » Cod sursa (job #1672734) | Cod sursa (job #64384) | Cod sursa (job #1941611) | Cod sursa (job #2771571) | Cod sursa (job #2907565)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int nmax = 5e4;
const ll inf = 1e15;
vector<vector<pair<ll, int>>> dx(nmax+5);
int n, m;
ll dp[nmax+5];
void dijkstra(int start) {
for(int i=1; i<=n; i++) dp[i] = inf;
dp[start] = 0;
priority_queue<pair<ll, int>, vector<pair<ll,int>>, greater<pair<ll, int>>> pq;
pq.emplace(0, 1);
while(pq.empty() == false) {
pair<ll, int> now = pq.top(); pq.pop();
if(now.first != dp[now.second]) continue;
for(auto nxt : dx[now.second])
if(now.first + nxt.first < dp[nxt.second]) {
dp[nxt.second] = now.first + nxt.first;
pq.emplace(now.first + nxt.first, nxt.second);
}
}
}
int main() {
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
f >> n >> m;
for(int i=1; i<=m; i++) {
int x, y, cost; f >> x >> y >> cost;
dx[x].emplace_back(cost, y);
}
dijkstra(1);
for(int i=2; i<=n; i++)
g << (dp[i] == inf ? 0 : dp[i]) << " ";
return 0;
}