Pagini recente » Cod sursa (job #2078739) | Cod sursa (job #2686818) | Cod sursa (job #1363247) | Cod sursa (job #1833419) | Cod sursa (job #2496396)
#include <bits/stdc++.h>
#define endl "\n"
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
#define cin fin
#define couf fout
const int Nmax = 50001;
const int infinit = INT_MAX / 2 - 1;
int n, m;
int x, y, c;
int d[Nmax];
bitset < Nmax > viz;
vector < pair < int, int > > g[Nmax];
struct compara
{
bool operator()(int x, int y)
{
return d[x] > d[y];
}
};
priority_queue < int, vector < int >, compara > coada;
void read()
{
cin >> n >> m;
while(m -- )
{
cin >> x >> y >> c;
g[x].push_back(make_pair(y, c));
}
}
void solve(int inceput)
{
for(int i=1; i<=n; i++)
{
d[i] = infinit;
}
d[inceput] = 0;
coada.push(inceput);
viz[inceput] = true;
while(!coada.empty())
{
int nodCurent = coada.top();
coada.pop();
viz[nodCurent] = false;
for(size_t i = 0; i < g[nodCurent].size(); i++)
{
int vecin = g[nodCurent][i].first;
int cost = g[nodCurent][i].second;
if(d[nodCurent] + cost < d[vecin])
{
d[vecin] = d[nodCurent] + cost;
if(viz[vecin] == false)
{
coada.push(vecin);
viz[vecin] = true;
}
}
}
}
}
void afiseaza(int inceput)
{
for(int i=1; i<=n; i++)
{
if(i != inceput && d[i] != infinit)
{
cout << d[i] << " ";
}
else if(d[i] == infinit)
{
cout << 0 << " ";
}
}
}
int main()
{
read();
solve(1);
afiseaza(1);
}