Pagini recente » Cod sursa (job #2450394) | Cod sursa (job #2118504) | Cod sursa (job #241980) | Cod sursa (job #3299083) | Cod sursa (job #2552937)
#include <bits/stdc++.h>
#define NMAX 50001
#define MMAX 250001
#define INF (1<<30)
#define Nod second
#define Cost first
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n, m, nr;
pair <int, int> vf[MMAX];
int urm[MMAX], last[NMAX], dist[NMAX];
priority_queue < pair <int, int> > Q;
bitset <NMAX> viz;
void adauga(int nod, int v, int pret)
{
vf[++nr].Nod = v;
vf[nr].Cost = pret;
urm[nr] = last[nod];
last[nod] = nr;
}
void citire()
{
fin>>n>>m;
for(int i=1; i<=n; i++)
{
int x, y, c;
fin>>x>>y>>c;
adauga(x, y, c);
}
}
void dijkstra(int start)
{
Q.push( {0, start} );
while(!Q.empty())
{
while(!Q.empty() && viz[ Q.top().Nod ] == 1)
Q.pop();
if(Q.empty()) break;
int nod = Q.top().Nod; int cost = -Q.top().Cost;
Q.pop();
dist[nod] = cost;
viz[nod] = 1;
for(int k = last[nod]; k; k = urm[k])
if(viz[ vf[k].Nod ] == 0)
Q.push( {-vf[k].Cost - cost, vf[k].Nod } );
}
for(int i = 2; i<=n; i++)
fout<<dist[i]<<' ';
}
int main()
{
citire();
dijkstra(1);
return 0;
}