Pagini recente » Cod sursa (job #324077) | Cod sursa (job #63884) | Cod sursa (job #496487) | Cod sursa (job #1567133) | Cod sursa (job #2098749)
#include <fstream>
#include <vector>
#include <queue>
#define INF 10000000000000
using namespace std;
ifstream cin("bellmanford.in");
ofstream cout("bellmanford.out");
long long noduri, muchii, a, b, c, nod, dist[50004], inq[50004], vasea[50004];
struct Vecin
{
long long nod, cost;
}drum;
vector <Vecin> vec[50004];
queue <long long> lista;
int main()
{
cin >> noduri >> muchii;
for(int i=1; i <= muchii; i++)
{
cin >> a >> b >> c;
vec[a].push_back({b,c});
}
for(int i=1; i <= noduri; i++)
dist[i] = INF;
dist[1] = 0;
lista.push(1);
while(lista.empty() == false)
{
nod = lista.front();
lista.pop();
inq[nod] = 0;
for(int i=0; i < vec[nod].size(); i++)
{
drum = vec[nod][i];
if(dist[drum.nod] > dist[nod]+drum.cost)
{
dist[drum.nod] = dist[nod]+drum.cost;
vasea[drum.nod]++;
if(vasea[drum.nod] == noduri)
{
cout << "Ciclu negativ!";
return 0;
}
if(inq[drum.nod] == 0)
{
inq[drum.nod] = 1;
lista.push(drum.nod);
}
}
}
}
for(int i=2; i <= noduri; i++)
{
cout << dist[i] << ' ';
}
}