Pagini recente » Cod sursa (job #3261592) | Cod sursa (job #805264) | Cod sursa (job #1692465) | Cod sursa (job #2551757) | Cod sursa (job #887643)
Cod sursa(job #887643)
#include <vector>
#include <list>
#include <queue>
#include <fstream>
#include <utility>
#include <functional>
using namespace std;
const int INF = 2000000000;
typedef pair <int, int> pii;
int n;
vector <vector <pii> > muchii;
vector <int> minim;
priority_queue <int, vector <int>, greater <int> > heap;
int main(void) {
ifstream fin("dijkstra.in"); int m, n1, n2, c;
fin >> n >> m;
muchii.resize(n);
for(int i = 0; i < m; ++i) {
fin >> n1 >> n2 >> c;
muchii[n1-1].reserve(n);
muchii[n1-1].push_back(make_pair(n2-1, c));
}
fin.close();
minim.resize(n, INF);
minim[0] = 0; heap.push(0);
while(!heap.empty()) {
int varf = heap.top(); heap.pop();
for(int i = 0; i != muchii[varf].size(); ++i)
if(minim[varf] + muchii[varf][i].second < minim[muchii[varf][i].first]) {
minim[muchii[varf][i].first] = minim[varf] + muchii[varf][i].second;
heap.push(muchii[varf][i].first);
}
}
ofstream fout("dijkstra.out");
for(int i = 1; i < n; ++i)
fout << (minim[i] == INF ? 0 : minim[i]) << ' ';
fout.close();
}