Pagini recente » Cod sursa (job #1512262) | Cod sursa (job #3247415) | Cod sursa (job #1757553) | Cod sursa (job #2637265) | Cod sursa (job #1060093)
#include <cstdio>
#include <queue>
#include <memory.h>
#define INF 0x3f3f3f3f
#define Nmax 50005
#define pb push_back
#define mp make_pair
#define cost first
#define next second
using namespace std;
vector<pair<int,int> > G[Nmax];
priority_queue<pair<int,int> ,vector<pair<int,int> > , greater<pair<int,int> > > Q;
int n,m,D[Nmax];
void read()
{
scanf("%d%d",&n,&m);
int a,b,c;
for(int i = 1;i <= m ; ++i)
{
scanf("%d%d%d",&a,&b,&c);
G[a].pb(mp(c,b));
}
}
void dijkstra(int k)
{
Q.push(mp(0,k));
memset(D,INF,sizeof(D));
D[k] = 0;
while(!Q.empty())
{
k = Q.top().second;
Q.pop();
for(vector<pair<int,int> > :: iterator it = G[k].begin (); it != G[k].end(); ++it)
if(D[it->next] > D[k] + it->cost)
{
D[it->next] = D[k] + it->cost;
Q.push(mp(D[it->next],it->next));
}
}
for(int i = 2; i <= n; ++i)
if(D[i] == INF)
printf("0 ");
else
printf("%d ",D[i]);
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
read();
dijkstra(1);
return 0;
}