Pagini recente » Cod sursa (job #95698) | Cod sursa (job #186485) | Cod sursa (job #2453065) | Cod sursa (job #2542076) | Cod sursa (job #2969559)
#include <fstream>
#include <vector>
#include <queue>
#define INF 2000000000
using namespace std;
ifstream fin("djikstra.in");
ofstream fout("djikstra.out");
struct elem
{
int x, c;
bool operator < (const elem &a) const
{
return c > a.c;
}
};
vector <elem> a[50002];
priority_queue<elem> pq;
int sol[50002];
int main()
{
int n,m,x,y,z,l;
elem p;
fin >> n >> m;
for (int i = 1; i <= m; i++)
{
fin >> x >> y >> z;
a[x].push_back({y, z});
a[y].push_back({y, z});
}
for (int i = 2; i <= n; i++)
{
sol[i] = INF;
}
pq.push({1,0});
while(!pq.empty())
{
p = pq.top();
pq.pop();
if (p.c == sol[p.x])
{
l = a[p.x].size();
for (int i = 0; i < l; i++)
{
if (sol[a[p.x][i].x] > sol[p.x] + a[p.x][i].c)
{
sol[a[p.x][i].x] = sol[p.x] + a[p.x][i].c;
pq.push({a[p.x][i].x, sol[a[p.x][i].x] });
}
}
}
}
for (int i = 2; i <= n; i++)
{
if (sol[i] == INF)
fout << 0 << " ";
else
fout << sol[i] << " ";
}
return 0;
}