Pagini recente » Cod sursa (job #105057) | Cod sursa (job #2240469) | Cod sursa (job #289845) | Istoria paginii runda/emag_cex_oni_liceu_avansati_2022 | Cod sursa (job #1574893)
#include <cstdio>
#include <vector>
#include <bitset>
#include <queue>
#define NMAX 50005
#define INF 50000000
#define mp make_pair
#define pb push_back
using namespace std;
bitset <NMAX>in_q;
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){
in_q[start]=1;
q.push(mp(-0,start));
while (!q.empty()){
int nod=q.top().second;
in_q[nod]=0;
q.pop();
for (auto it:v[nod])
if (best[it.first]>best[nod]+it.second){
best[it.first]=best[nod]+it.second;
if (!in_q[it.first])
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);
}