Pagini recente » Cod sursa (job #2770031) | Cod sursa (job #2122078) | Cod sursa (job #1902593) | Cod sursa (job #2654175) | Cod sursa (job #1867371)
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <random>
#include <tuple>
#include <limits>
#include <functional>
#include <complex>
#include <bitset>
#include <list>
//#include <atomic>
//#include <condition_variable>
//#include <future>
//#include <mutex>
//#include <thread>
using namespace std;
#define debug(x) cerr << #x << " = " << x << "\n"
const int INF = 0x3f3f3f3f;
const long long INFL = 0x3f3f3f3f3f3f3f3fLL;
const int N = 50005;
typedef int Weight;
typedef int Index;
vector< pair<Weight, Index> > g[N];
vector<Weight> dist(N);
vector<bool> visited(N);
void dijkstra(int s)
{
fill(dist.begin(), dist.end(), INF);
priority_queue< pair<Weight, Index>, vector< pair<Weight, Index> >, std::greater< pair<Weight, Index> > > q;
dist[s] = 0;
q.push({0, s});
while (!q.empty())
{
Index u = q.top().second;
q.pop();
if (visited[u]) continue;
visited[u] = true;
for (Index ei = 0; ei < (Index) g[u].size(); ei++)
{
const pair<Weight, Index>& e = g[u][ei];
Index v = e.second;
Weight d = dist[u] + e.first;
if (d < dist[v])
{
dist[v] = d;
q.push({d, v});
}
}
}
}
int main(int argc, char* argv[])
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
cin.sync_with_stdio(false);
int n, m;
cin >> n >> m;
for (int i = 0; i < m; i++)
{
int x, y, w;
cin >> x >> y >> w;
x--, y--;
g[x].push_back({w, y});
}
dijkstra(0);
for (int i = 1; i < n; i++) cout << (dist[i] == INF ? 0 : dist[i])<< " ";
cout << "\n";
return 0;
}