Pagini recente » Cod sursa (job #1532700) | Cod sursa (job #43299) | Cod sursa (job #2156192) | Cod sursa (job #726438) | Cod sursa (job #2686034)
//ALEXANDRU MICLEA
#include <vector>
#include <algorithm>
#include <string>
#include <string.h>
#include <cstring>
#include <queue>
#include <map>
#include <set>
#include <unordered_map>
#include <time.h>
#include <iomanip>
#include <deque>
#include <math.h>
#include <cmath>
#include <assert.h>
#include <stack>
#include <bitset>
#include <random>
#include <chrono>
#include <assert.h>
using namespace std;
using ll = long long;
#include <fstream>
//ifstream cin("input.in"); ofstream cout("output.out");
ifstream cin("dijkstra.in"); ofstream cout("dijkstra.out");
//VARIABLES
class cmp {
public:
bool operator () (pair <int, int> &a, pair <int, int> &b){
return a.second > b.second;
}
};
const int MAXN = 50005;
const int MAXM = 250005;
const int INF = 1e9;
vector <vector <pair <int, int>>> gr(MAXM);
priority_queue <pair <int, int>, vector <pair <int, int>>, cmp> q;
int dp[MAXN];
int vis[MAXM];
//FUNCTIONS
//MAIN
int main() {
int n, m; cin >> n >> m;
for (int i = 1; i <= m; i++){
int x, y, val; cin >> x >> y >> val;
gr[x].push_back({y, val});
}
for (int i = 2; i <= n; i++) dp[i] = INF;
q.push({1,0});
while (!q.empty()){
int nod = q.top().first;
int d_nod = q.top().second;
q.pop();
if (d_nod != dp[nod]) continue;
vis[nod] = true;
for (auto& x : gr[nod]){
int nspre = x.first;
int dspre = x.second;
if (dp[nspre] > dspre + d_nod){
dp[nspre] = dspre + d_nod;
q.push({nspre, dp[nspre]});
}
}
}
for(int i = 2; i <= n; i++, cout << ' '){
if (dp[i] == INF) cout << 0;
else cout << dp[i];
}
return 0;
}