Pagini recente » Cod sursa (job #676285) | Cod sursa (job #819688) | Cod sursa (job #3204300) | Cod sursa (job #1590877) | Cod sursa (job #1111612)
#include<cstdio>
#include<vector>
#include<algorithm>
#include<set>
#define ins insert
#define pb push_back
#define mp make_pair
#define N_MAX 50010
#define INF 600000
using namespace std;
multiset < pair <int,int> > H;
vector < pair <int,int> > G[N_MAX];
int D[N_MAX],N;
inline void Dijkstra()
{
while (!H.empty())
{
int Nod=(*H.begin()).second, Cost=D[Nod];
H.erase(H.begin());
for (vector < pair <int,int> > :: iterator it=G[Nod].begin();it!=G[Nod].end();++it)
{
int nod=(*it).first, cost=(*it).second;
if (cost + Cost < D[nod])
{
if (D[nod]!=INF) H.erase(H.find(mp(D[nod],nod)));
D[nod]=cost+Cost; H.ins(mp(D[nod],nod));
}
}
}
}
inline void Load_Data(int &N)
{
int M,x,y,c;
scanf("%d%d",&N,&M);
for (int i=1;i<=M;++i)
scanf("%d%d%d",&x,&y,&c), G[x].pb(mp(y,c)), G[y].pb(mp(x,c));
for (int i=1;i<=N;++i) D[i]=INF;
H.ins(mp(0,1)); D[1]=0;
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
Load_Data(N);
Dijkstra();
for (int i=2;i<=N;++i)
if (D[i]!=INF) printf("%d ",D[i]);
else printf("0 ");
printf("\n");
fclose(stdin); fclose(stdout);
return 0;
}