Pagini recente » Cod sursa (job #2551740) | Cod sursa (job #2499685) | Cod sursa (job #2654584) | Cod sursa (job #2978856) | Cod sursa (job #3208418)
#include <bits/stdc++.h>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
#define pii pair<int, int>
#define pb push_back
#define fi first
#define se second
const int NMAX = 5e4+5;
const int INF = 0x3f3f3f3f;
int n, m, x, y, wt, dist[NMAX];
vector<vector<pii>> graf(NMAX);
void read()
{
in>>n>>m;
for (int i=1; i<=m; i++)
in>>x>>y>>wt, graf[x].pb({y, wt});
}
void Dijkstra(int start)
{
memset(dist, INF, sizeof dist);
set<pii> s;
s.insert({0, start});
dist[start] = 0; //ASTA LIPSEA
while (!s.empty())
{
int from, currwt;
tie(currwt, from) = *(s.begin());
s.erase(s.begin());
for (auto to : graf[from])
{
if (currwt+to.se < dist[to.fi])
{
if (dist[to.fi]!=INF) s.erase({dist[to.fi], to.fi});
dist[to.fi] = currwt+to.se;
s.insert({dist[to.fi], to.fi});
}
}
}
}
void solve()
{
Dijkstra(1);
for (int i=2; i<=n; i++)
dist[i] == INF ? out<<0<<' ' : out<<dist[i]<<' ';
}
int main()
{
cin.tie(0); cout.tie(0);
read();
solve();
return 0;
}