Pagini recente » Cod sursa (job #1888070) | Istoria paginii runda/minune8/clasament | Cod sursa (job #1377341) | Cod sursa (job #2623742) | Cod sursa (job #2837673)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <bitset>
#define inf 2000000001
#define nmax 50001
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
struct Muchie
{
int y, cost;
} aux;
int n, m, mnv;
bitset <nmax> vf;
vector <int> D;
queue <int> q;
vector <Muchie> C[nmax];
bool bellman_ford(int x)
{
vector <int> cate(n+1, 0);
D.assign(n+1, inf);
D[x]=0;
q.push(x);
vf[x]=1;
while(!q.empty())
{
mnv=q.front();
q.pop();
vf[mnv]=0;
for(auto i: C[mnv])
{
if(D[mnv]+i.cost<D[i.y])
{
D[i.y]=D[mnv]+i.cost;
if(!vf[mnv])
{
q.push(i.y);
vf[i.y]=1;
cate[i.y]++;
}
if(cate[i.y]>=n)
{
return 0;
}
}
}
}
return 1;
}
int main()
{
fin>>n>>m;
for(int i=0; i<m; i++)
{
fin>>mnv>>aux.y>>aux.cost;
C[mnv].push_back(aux);
}
if(!bellman_ford(1))
{
fout<<"Ciclu negativ!";
}
else
{
for(int i=2; i<=n; i++)
{
fout<<D[i]<<' ';
}
}
fin.close();
fout.close();
return 0;
}