Pagini recente » Cod sursa (job #62148) | Cod sursa (job #2394428) | Cod sursa (job #2662091) | Cod sursa (job #1009227) | Cod sursa (job #2358429)
#include <bits/stdc++.h>
#define DMAX 50010
#define INFINIT 100000000
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct ele{int y,cost;};
vector<ele> a[DMAX];
int cost[DMAX];
bool da[DMAX];
void citire();
int n,start,m;
void rezolva();
class compar
{
public:
bool operator() (const int& x, const int&y) const
{
return (cost[x]>cost[y]);
}
};
int pred[DMAX];
priority_queue<int,std::vector<int>,compar> Heap;
int main()
{int i;
citire();
rezolva();
for(i=2;i<=n;i++)
if(cost[i]==INFINIT)
fout<<0<<' ';
else
fout<<cost[i]<<' ';
return 0;
}
void citire()
{
int i,x,y,cst;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y>>cst;
a[x].push_back({y,cst});
}
start=1;
for(i=1;i<=n;i++)
cost[i]=INFINIT,pred[i]=start;
cost[start]=0;
pred[start]=0;
for(i=0;i<a[start].size();i++)
cost[a[start][i].y]=a[start][i].cost,Heap.push(a[start][i].y);
}
void rezolva()
{int x,i;
da[start]=1;
while(Heap.size())
{
x=Heap.top();
da[x]=1;
Heap.pop();
for(i=0;i<a[x].size();i++)
if(!da[a[x][i].y])
if(cost[x]+a[x][i].cost<cost[a[x][i].y])
{
cost[a[x][i].y]=cost[x]+a[x][i].cost;
Heap.push(a[x][i].y);
pred[a[x][i].y]=x;
}
}
}