Pagini recente » Istoria paginii runda/testqwerty/clasament | Cod sursa (job #1377124) | Istoria paginii runda/testround10 | Istoria paginii template/fmi-no-stress-4/footer | Cod sursa (job #2225414)
#include <bits/stdc++.h>
using namespace std;
const int inf = (1<<31)-1;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n, m, Distanta[50001];
bool check[50001];
vector < pair <int, int> > v[50001];
struct compare{
bool operator()(int x, int y)
{
return Distanta[x] > Distanta[y];
}
};
priority_queue <int, vector<int>, compare > coada;
int main()
{
fin >> n >> m;
for(int i = 1; i <= m; i++)
{
int a, b, c;
fin >> a >> b >> c;
v[a].push_back(make_pair(b,c));
}
for(int i = 2; i <= n; i++)
Distanta[i] = inf;
coada.push(1);
while(!coada.empty())
{
int nod;
nod = coada.top();
coada.pop();
check[nod] = false;
for(unsigned int i = 0; i < v[nod].size(); i++)
{
int vecin, valoare;
vecin = v[nod][i].first;
valoare = v[nod][i].second;
if(Distanta[nod] + valoare < Distanta[vecin])
{
Distanta[vecin] = Distanta[nod] + valoare;
if(check[vecin] == false)
{
coada.push(vecin);
check[vecin] = true;
}
}
}
}
for(int i = 2; i <= n; i++)
if(Distanta[i] == inf)
fout << 0 << " ";
else
fout << Distanta[i] << " ";
return 0;
}