Pagini recente » Cod sursa (job #2347565) | Cod sursa (job #1841980) | Cod sursa (job #297803) | Cod sursa (job #2372688) | Cod sursa (job #3235638)
#include <bits/stdc++.h>
std :: ifstream in ("dijkstra.in");
std :: ofstream out ("dijkstra.out");
const int NMAX = 5e4 + 5;
const int INF = 2e9;
int n;
int m;
int x;
int y;
int d;
std :: vector <int> dist(NMAX, INF);
std :: vector <std :: pair<int, int>> v[NMAX];
std :: priority_queue <std :: pair<int, int>> pq;
std :: bitset <NMAX> visited;
void dijkstra()
{
pq.push(std :: make_pair(0, 1));
while(!pq.empty())
{
int nod = pq.top().second;
pq.pop();
if(!visited[nod])
{
for(auto i : v[nod])
{
if(dist[nod] + i.second < dist[i.first])
{
dist[i.first] = dist[nod] + i.second;
pq.push(std :: make_pair(-dist[i.first], i.first));
}
}
visited[nod] = true;
}
}
}
int main()
{
std :: ios_base :: sync_with_stdio(false);
in.tie(NULL);
out.tie(NULL);
in >> n >> m;
for(int i = 1; i <= m; i ++)
{
in >> x >> y >> d;
v[x].push_back(std :: make_pair(y, d));
}
dist[1] = 0;
dijkstra();
for(int i = 2; i <= n; i ++)
{
if(dist[i] == INF)
{
out << 0 << " ";
}
else
{
out << dist[i] << " ";
}
}
return 0;
}