Pagini recente » Cod sursa (job #1816836) | Cod sursa (job #344310) | Cod sursa (job #1719918) | Cod sursa (job #108358) | Cod sursa (job #2444275)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
#define pb push_back
#define x first
#define y second
#define pii pair<int,int>
const int Nmax = 50000 + 5;
int n, m, dp[Nmax], viz[Nmax];
bool inq[Nmax], ok;
vector<pii>v[Nmax];
queue<pii>q;
int main()
{
fin >> n >> m;
for(int i = 1, a, b, c; i <= m; ++i)
{
fin >> a >> b >> c;
v[a].pb({b, c});
}
for(int i = 1; i <= n; ++i)
dp[i] = 1 << 30;
dp[1] = 0; inq[1] = 1;
q.push({1 , 0});
while(!q.empty())
{
int nod = q.front().first;
int cost = q.front().second;
viz[nod] ++;
if(viz[nod] > n - 1)
{
ok = 1;
break;
}
inq[nod] = 0;
q.pop();
for(auto i : v[nod])
{
if(dp[i.x] > dp[nod] + i.y)
{
dp[i.x] = dp[nod] + i.y;
if(!inq[i.x])q.push({i.x, dp[i.x]}), inq[i.x] = 1;
}
}
}
if(ok)
fout << "Ciclu negativ!";
else
{
for(int i = 2; i <= n; ++i)
fout << dp[i] << ' ';
}
return 0;
}