Pagini recente » Cod sursa (job #304949) | Cod sursa (job #2400526) | Cod sursa (job #821669) | Cod sursa (job #1366148) | Cod sursa (job #2036031)
#include <bits/stdc++.h>
#define inf 10000
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
int n, m, ok, drum[50006];
int viz[50006], v[50006];
vector<pair<int, int> >L[50006];
queue < int >q;
void Citire()
{
int i, x, y, z;
fin >> n >> m;
for(i = 1; i <= m; i++)
{
fin >> x >> y >> z;
L[x].push_back({y, z});
}
for(i = 2; i <= n; i++)
drum[i] = inf;
}
void Bellmanford()
{
int i, o, p, j;
q.push(1);
while(!q.empty() && !ok)
{
i = q.front();
q.pop();
for(j = 0; j < L[i].size(); j++)
{
o = L[i][j].first;
p = L[i][j].second;
if(drum[o] > drum[i] + p)
{
drum[o] = drum[i] + p;
if(!viz[p])
{
if(v[p] > n)
ok = 1;
else
{
q.push(o);
v[p]++;
viz[p] = 1;
}
}
}
}
}
if(ok == 1)
fout << "Ciclu negativ!\n";
else
for(i = 2; i <= n; i++)
fout << drum[i] << " ";
}
int main()
{
Citire();
Bellmanford();
return 0;
}