Pagini recente » Cod sursa (job #2597465) | Cod sursa (job #938682) | Cod sursa (job #2134826) | Cod sursa (job #949647) | Cod sursa (job #1313560)
#include <fstream>
#include <queue>
#include <vector>
#include <bitset>
#include <cstring>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int inf=0x3f3f3f3f;
int Rlcost[50001];
struct graf
{
int y,cost;
};
vector<graf>v[50001];
vector<graf>::iterator it;
struct cod
{
int nod,cost;
};
struct comp
{
bool operator() (const cod &a,const cod &b)
{
return a.cost<b.cost;
}
};
bitset<50001>uz;
priority_queue<cod,vector<cod>,comp> H;
inline void dijkstra(int i)
{
uz[i]=1;
for(it=v[i].begin();it!=v[i].end();it++)
{
if(it->cost+Rlcost[i]<Rlcost[it->y])
{
cod pas;
pas.nod=it->y;
pas.cost=it->cost+Rlcost[i];
Rlcost[it->y]=pas.cost;
H.push(pas);
}
}
}
int main()
{
memset(Rlcost,inf,sizeof(Rlcost));
int n,q,m,i,nr=1;
graf pas;
fin>>n>>m;
for(q=1;q<=m;q++)
{
fin>>i>>pas.y>>pas.cost;
v[i].push_back(pas);
}
uz[1]=1;
cod rac;
for(it=v[1].begin();it!=v[1].end();it++)
{
rac.nod=it->y;
rac.cost=it->cost;
H.push(rac);
Rlcost[it->y]=rac.cost;
}
for(nr=2;nr<=n;nr++)
{
while(uz[H.top().nod]!=0) H.pop();
while(H.top().cost!=Rlcost[H.top().nod]) H.pop();
i=H.top().nod;
dijkstra(i);
}
for(i=2;i<=n;i++)
{
if(Rlcost[i]==inf) fout<<"0 ";
else fout<<Rlcost[i]<<" ";
}
}