Pagini recente » Cod sursa (job #2664812) | Cod sursa (job #2283029) | Cod sursa (job #1430425) | Cod sursa (job #2903465) | Cod sursa (job #3285563)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 50003
#define inf 0x3f3f3f3f
#define mp make_pair
#define nod first
#define dist second
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
struct q_entry {
int nod;
long long dist;
};
bool operator< (q_entry a, q_entry b)
{
return a.dist > b.dist;
}
vector<q_entry> G[NMAX];
priority_queue<q_entry> q;
int n, m;
bool viz[NMAX];
long long dist[NMAX];
void dijkstra(int start)
{
if (viz[start]) return;
q.push({start, 0});
while (!q.empty())
{
q_entry c = q.top();
q.pop();
if (viz[c.nod]) continue;
viz[c.nod] = true;
dist[c.nod] = c.dist;
for (auto it : G[c.nod])
{
if (viz[it.nod]) continue;
q.push({it.nod, c.dist + it.dist});
}
}
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= m; i++)
{
int x, y, c;
fin >> x >> y >> c;
G[x].push_back({y, c});
G[y].push_back({x, c});
}
dijkstra(1);
for (int i = 2; i <= n; i++)
fout << dist[i] << " ";
return 0;
}