Pagini recente » Cod sursa (job #2364095) | Clasament sim04 | Cod sursa (job #1599085) | Cod sursa (job #1071468) | Cod sursa (job #1313635)
#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;
}
};
priority_queue<cod,vector<cod>,comp> H;
inline void dijkstra(int i)
{
for(it=v[i].begin();it!=v[i].end();it++)
{
int a=it->y;
if(it->cost+Rlcost[i]<Rlcost[a])
{
cod pas;
pas.nod=a;
pas.cost=it->cost+Rlcost[i];
Rlcost[a]=pas.cost;
H.push(pas);
}
}
}
int main()
{
memset(Rlcost,inf,sizeof(Rlcost));
int n,q,m,i,cost;
graf pas;
fin>>n>>m;
for(q=1;q<=m;q++)
{
fin>>i>>pas.y>>pas.cost;
v[i].push_back(pas);
}
cod rac;
rac.nod=1;
rac.cost=0;
Rlcost[1]=0;
H.push(rac);
while(!H.empty())
{
i=H.top().nod;
cost=H.top().cost;
H.pop();
if(cost>Rlcost[i]) continue;
dijkstra(i);
}
for(i=2;i<=n;i++)
{
if(Rlcost[i]==inf) fout<<"0 ";
else fout<<Rlcost[i]<<" ";
}
}