Pagini recente » Cod sursa (job #1108386) | Cod sursa (job #1073109) | Cod sursa (job #687958) | Cod sursa (job #1041883) | Cod sursa (job #1135858)
#include <cstdio>
#include <vector>
#include <algorithm>
#include <memory.h>
#include <queue>
#define INF 0x3f3f3f3f
#define Nmax 50005
#define pb push_back
#define mp make_pair
#define next second
#define cost first
#define piiIT vector<pair<int,int> >::iterator
using namespace std;
priority_queue<pair<int,int>,vector<pair<int,int> >, greater<pair<int,int> > > Q;
vector<pair<int,int> > G[Nmax];
int N,M,DP[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));
}
memset(DP,INF,sizeof(DP));
}
void dykstra(int k)
{
Q.push(mp(0,k));
DP[k] = 0;
while(!Q.empty())
{
k = Q.top().next;Q.pop();
for(piiIT it = G[k].begin(); it != G[k].end(); ++it)
if(DP[it->next] > DP[k] + it->cost)
{
DP[it->next] = DP[k] + it->cost;
Q.push(mp(DP[it->next],it->next));
}
}
}
void afish()
{
for(int i = 2; i <= N; ++i)
{
if(DP[i] == INF)printf("0 ");
else printf("%d ",DP[i]);
}
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
read();
dykstra(1);
afish();
return 0;
}