Pagini recente » Cod sursa (job #2126510) | Cod sursa (job #1471901) | Cod sursa (job #2410592) | Cod sursa (job #2824423) | Cod sursa (job #1197602)
#include <cstdio>
#include <queue>
#include <vector>
#include <cstring>
using namespace std;
#define IN "dijkstra.in"
#define OUT "dijkstra.out"
#define rint register int
#define pb push_back
#define mp make_pair
#define s second
#define f first
const int MAX = 50014;
const int INF = 1<<30;
typedef pair<int,int> P;
vector <P> gr[MAX];
int d[MAX];
struct cmp{
bool operator()(const P &a ,const P &b)
{
return (a.second>b.second);
}
};
priority_queue <P,vector<P>,cmp> h;
void dijkstra (int nod);
int main()
{
int n,e;
freopen(IN, "r", stdin);
freopen(OUT, "w", stdout);
scanf("%d%d", &n, &e);
while(e--){
int x,y,cost;
scanf("%d%d%d", &x ,&y ,&cost);
gr[x].pb(mp(y,cost));
}
for(rint i=2;i<=n;d[i]=INF,++i);
dijkstra(1);
for(rint i=2;i<=n;++i)printf("%d ",(d[i]==INF)?0:d[i]);
return 0;
}
void dijkstra (int nod){
h.push(mp(1,0));
d[1]=0;
while(!h.empty()){
int fata=h.top().f;
int cf=h.top().s;
h.pop();
for(rint i=0;i<(int)gr[fata].size();++i)
if(gr[fata][i].s+cf<d[gr[fata][i].f]){
d[gr[fata][i].f]=cf+gr[fata][i].s;
h.push(mp(gr[fata][i].f,d[gr[fata][i].f]));
}
}
}