Pagini recente » Cod sursa (job #732617) | Cod sursa (job #1153790) | Cod sursa (job #371018) | Cod sursa (job #61240) | Cod sursa (job #1574898)
#include <cstdio>
#include <vector>
#include <queue>
#define NMAX 50005
#define INF 50000000
#define mp make_pair
#define pb push_back
using namespace std;
vector <pair <int, int > >v[NMAX];
priority_queue <pair <int, int > >q;
int best[NMAX];
int n,m,x,y,z;
void init(){
for (int i=2;i<=n;i++)
best[i]=INF;
}
void dijkstra(int start){
q.push(mp(-0,start));
while (!q.empty()){
int nod=q.top().second;
q.pop();
for (auto it:v[nod])
if (best[it.first]>best[nod]+it.second){
best[it.first]=best[nod]+it.second;
q.push(mp(-best[it.first],it.first));
}
}
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d %d\n",&n,&m);
for (;m;m--){
scanf("%d %d %d\n",&x,&y,&z);
v[x].pb(mp(y,z));
v[y].pb(mp(x,z));
}
init();
dijkstra(1);
for (int i=2;i<=n;i++)
printf("%d ",(best[i]!=INF?best[i]:0));
fclose(stdin);
fclose(stdout);
}