Pagini recente » Profil Dantonise10o | Cod sursa (job #1569711)
#include <fstream>
#include <queue>
#include <vector>
#include <bitset>
using namespace std;
ofstream fout("dijkstra.out");
ifstream fin("dijkstra.in");
const int NMAX = 50005;
int N, M, INF = 1e7;
vector<pair<int, int>> Graf[NMAX];
bitset<NMAX> Viz;
int Drum[NMAX];
struct cmp {
bool operator() (const pair<int, int> & a, const pair<int, int> & b) { return a.second > b.second; }
};
priority_queue< pair<int, int>, vector<pair<int, int>>, cmp > q;
void citire()
{
fin >> N >> M;
for(int i = 1, x, y, c; i <= M; i++)
{
fin >> x >> y >> c;
Graf[x].push_back(make_pair(y, c));
Graf[y].push_back(make_pair(x, c));
}
}
void dijkstra(int nod)
{
Viz.reset();
fill(Drum + 1, Drum + N + 1, INF);
Drum[nod] = 0;
q.push({nod, 0});
while(!q.empty()) {
int sursa = q.top().first;
q.pop();
if(Viz[sursa]) continue;
Viz[sursa] = true;
for(const auto & nodCurent : Graf[sursa]) {
if(Drum[nodCurent.first] > Drum[sursa] + nodCurent.second) {
Drum[nodCurent.first] = Drum[sursa] + nodCurent.second;
q.push(nodCurent);
}
}
}
}
int main()
{
citire();
dijkstra(1);
for(int i = 1; i <= N; i++)
fout << ( (Drum[i] != INF) ? Drum[i] : 0 ) << ' ';
return 0;
}