Pagini recente » Monitorul de evaluare | Arhiva de probleme | Monitorul de evaluare | Statistici ion alina (abu_cita) | Cod sursa (job #1837121)
#include <fstream>
#include <vector>
#include <queue>
#define NM 50005
#define fi first
#define se second
using namespace std;
vector < pair < int, int > >v[NM];
queue < int > q;
bool in_queue[NM];
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n, m, c[NM];
int main()
{
int x,y,z;
f >> n >> m;
for(int i = 1; i <= m; ++i)
{
f >> x >> y >> z;
v[x].push_back(make_pair(y,z));
}
int nod;
for(int i = 1; i <= n; ++i)
c[i] = 1 << 30;
q.push(1);
c[1] = 0;
while(!q.empty())
{
nod = q.front();
in_queue[nod] = false;
q.pop();
for(int i = 0 ; i < v[nod].size(); ++i)
{
if(c[v[nod][i].fi] > c[nod] + v[nod][i].se)
{
c[v[nod][i].fi] = c[nod] + v[nod][i].se;
if(!in_queue[v[nod][i].fi])
q.push(v[nod][i].fi), in_queue[v[nod][i].fi] = true;
}
}
}
for(int i = 2; i <= n; ++i)
{
if(c[i] != 1 << 30) g << c[i] << ' ';
else g << "0 ";
}
return 0;
}