Pagini recente » Cod sursa (job #2041313) | tema | Cod sursa (job #1984176) | Cod sursa (job #779388) | Cod sursa (job #2706274)
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream fi("dijkstra.in");
ofstream fo("dijkstra.out");
const int inf = 1000000000;
int n, m, d[50001];
bool f[50001];
struct compara {
bool operator()(int x, int y)
{
return d[x] > d[y];
}
};
vector <pair <int, int>> v[50005];
priority_queue < int, vector <int>, compara> q;
void Dijkstra(int p)
{
int i, nod, vecin, cost;
for (i = 1; i <= n; i++)
d[i] = inf;
d[p] = 0;
q.push(p);
f[p] = true;
while (!q.empty())
{
nod = q.top();
q.pop();
f[nod] = false;
for (size_t j = 0; j < v[nod].size(); j++)
{
vecin = v[nod][j].first;
cost = v[nod][j].second;
if (d[nod] + cost < d[vecin])
{
d[vecin] = d[nod] + cost;
if (!f[vecin])
{
q.push(vecin);
f[vecin] = true;
}
}
}
}
}
int main()
{
int i, j, x, y, c;
fi >> n >> m;
for (i = 1; i <= m; i++)
{
fi >> x >> y >> c;
v[x].push_back(make_pair(y, c));
}
Dijkstra(1);
for (i = 2; i <= n; i++)
if (d[i] != inf)
fo << d[i] << " ";
else fo << 0 << " ";
return 0;
}