Pagini recente » Cod sursa (job #2743802) | Cod sursa (job #2313503) | Cod sursa (job #1473348) | Cod sursa (job #2485931) | Cod sursa (job #2099145)
#include <cstdio>
#include <cstring>
#include <vector>
#include <set>
#define NNOD 50001
#define INF 1000000001
#define pb push_back
#define mkp make_pair
using namespace std;
int nnod,nmuc,i,x,y,cost,vdist[NNOD],dcrt,nodcrt,nvec,prev,veccrt,dnew;
int dold,lgmuc;
vector < pair<int,int> > lst[50001];
set < pair<int,int> > snot;
int main()
{
freopen ("dijkstra.in","r",stdin);
freopen ("dijkstra.out","w",stdout);
scanf ("%d",&nnod); //?
scanf ("%d",&nmuc);
for (i=1;i<=nmuc;++i)
{
scanf ("%d%d%d",&x,&y,&cost);
lst[x].pb(mkp(y,cost));
}
snot.insert(mkp(0,1));
// for (i=2;i<=nnod;++i) snot.insert(mkp(INF,i))
for (i=2;i<=nnod;++i)
{
vdist[i]=INF;
}
while (!snot.empty())
{
dcrt=snot.begin()->first;
nodcrt=snot.begin()->second;
snot.erase(snot.begin());
vdist[nodcrt]=dcrt;
nvec=lst[nodcrt].size();
prev=vdist[nodcrt];
for (i=0;i<nvec;++i)
{
veccrt=lst[nodcrt][i].first;
lgmuc=lst[nodcrt][i].second;
if (veccrt==nodcrt) continue;
dnew=prev+lgmuc;
dold=vdist[veccrt];
if (dnew<dold)
{
if (dold!=INF)
{
snot.erase(snot.find(mkp(dold,veccrt)));
}
snot.insert(mkp(dnew,veccrt));
vdist[veccrt]=dnew;
}
}
}
for (i=2;i<=nnod;++i)
{
printf ("%d ",vdist[i]);
}
return 0;
}