Pagini recente » Profil M@2Te4i | Profil M@2Te4i | Rezultatele filtrării | Cod sursa (job #409843) | Cod sursa (job #2076618)
#include <iostream>
#include <set>
#include <vector>
#include <queue>
#include <fstream>
#include <algorithm>
#define NMax 50005
#define inf 0x3f3f3f3f
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n, m, use[NMax];
vector < pair < int, int > > graf[NMax];
vector < int > d;
struct compare
{
bool operator()(const int& i, const int& j)
{
return d[i] < d[j];
}
};
multiset < int, compare > q;
int main()
{
int x, y, c, nod, nod2, cost;
vector < pair < int, int > > :: iterator it;
f >> n >> m;
d.assign(n + 1, inf);
d[1] = 0;
for(int i = 1; i <= m; ++i)
{
f >> x >> y >> c;
graf[x].push_back({y, c});
}
q.insert(1);
while(!q.empty())
{
nod = *q.begin();
q.erase(q.begin());
if(!use[nod])
{
use[nod] = 1;
for(it = graf[nod].begin(); it != graf[nod].end(); it++)
{
nod2 = it -> first;
cost = it -> second;
if(d[nod2] > d[nod] + cost)
{
d[nod2] = d[nod] + cost;
q.insert(nod2);
}
}
}
}
for(int i = 2; i <= n; ++i) g << d[i] << ' ';
}