Pagini recente » Cod sursa (job #466688) | Cod sursa (job #3165873) | Cod sursa (job #909386) | Cod sursa (job #783137) | Cod sursa (job #2568711)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#define nmax 50005
#define oo 1e9
#include <bitset>
using namespace std;
vector < pair < int, int > > adjacents[nmax];
priority_queue < pair < int, int > > PQ;
bitset < nmax > v;
int d[nmax], n, m, sol[nmax];
void Read()
{
ifstream fin("dijkstra.in");
int x, y, c;
fin >> n >> m;
for(int i = 1; i <= m; i++)
{
fin >> x >> y >> c;
adjacents[x].push_back(make_pair(y, c));
adjacents[y].push_back(make_pair(x, c));
}
fin.close();
}
void Dijkstra(int vertex)
{
int n, y, x, cost;
v.reset();
d[vertex] = 0;
PQ.push(make_pair(0, vertex));
while(!PQ.empty())
{
x = PQ.top().second;
PQ.pop();
if(!v[x])
{
v[x] = 1;
for(auto it : adjacents[x])
{
y = it.first;
cost = it.second;
cout << d[x] << " " << cost;
if(d[y] > d[x] + cost)
{
d[y] = d[x] + cost;
PQ.push(make_pair(-d[y], y));
}
}
}
}
}
void Solve()
{
ofstream fout("dijkstra.out");
for(int i = 1; i <= n; i++)
d[i] = oo;
Dijkstra(1);
for(int i = 2; i <= n; i++)
fout << d[i] << " ";
fout << "\n";
fout.close();
}
int main()
{
Read();
Solve();
return 0;
}