Pagini recente » Cod sursa (job #2400380) | Cod sursa (job #2980933) | Cod sursa (job #140714) | Cod sursa (job #623960) | Cod sursa (job #2098732)
#include <fstream>
#include <vector>
#include <queue>
#define INF 10000000000000
using namespace std;
ifstream cin("bellmanford.in");
ofstream cout("bellmanford.out");
int noduri, muchii, a, b, c, nod, dist[50004], inq[50004], vasea[50004];
struct Vecin
{
int nod, cost;
}drum;
vector <Vecin> vec[50004];
queue <int> 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;
vasea[nod]++;
for(int i=0; i < vec[nod].size(); i++)
{
drum = vec[nod][i];
if(inq[drum.nod] == 0)
{
if(dist[drum.nod] > dist[nod]+drum.cost)
{
if(vasea[drum.nod] == noduri)
{
cout << "Ciclu negativ!";
return 0;
}
dist[drum.nod] = dist[nod]+drum.cost;
if(inq[drum.nod] == 0)
{
inq[drum.nod] = 1;
lista.push(drum.nod);
}
}
}
}
}
for(int i=2; i <= noduri; i++)
{
cout << dist[i] << ' ';
}
}