Pagini recente » Cod sursa (job #2669720) | Cod sursa (job #2807357) | Cod sursa (job #1396341) | Cod sursa (job #430312) | Cod sursa (job #2836808)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define inf 2000000001
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
struct Muchie
{
int y, cost;
} aux;
int n, m, cate=0, x;
int D[50001];
bool vf[50001], ok=true, vff[50001];
vector <Muchie> C[50001];
void relaxare(int x, bool vf[50001])
{
for(auto i: C[x])
{
if(D[x]+i.cost<D[i.y])
{
D[i.y]=D[x]+i.cost;
vf[i.y]=1;
}
}
}
int main()
{
fin>>n>>m;
/*
for(int i=2; i<=n; i++)
{
D[i]=inf;
}
*/
for(int i=0; i<m; i++)
{
fin>>x>>aux.y>>aux.cost;
C[x].push_back(aux);
if(x==1)
{
D[aux.y]=aux.cost;
}
else
{
D[i]=inf;
}
}
relaxare(1, vf);
for(int i=0; i<n-2; i++)
{
if(i%2==1)
{
for(int i=1; i<n; i++)
{
if(vf[i])
{
relaxare(i, vff);
vf[i]=0;
}
}
}
else
{
for(int i=1; i<n; i++)
{
if(vff[i])
{
relaxare(i, vf);
vff[i]=0;
}
}
}
}
/*
for(auto i: C[1])
{
if(D[1]+i.cost<D[i.y])
{
D[i.y]=D[1]+i.cost;
ok=false;
}
}
*/
if(!ok)
{
fout<<"Ciclu negativ!";
}
else
{
for(int i=2; i<=n; i++)
{
fout<<D[i]<<' ';
}
}
fin.close();
fout.close();
return 0;
}