Pagini recente » Cod sursa (job #1709796) | Cod sursa (job #1086974) | Cod sursa (job #307724) | Cod sursa (job #1274808) | Cod sursa (job #2734872)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream cin("bellmanford.in");
ofstream cout("bellmanford.out");
const int N=50005;
const long long INF=125e8+5;
int n,m,k,x,y,cost;
long long d[N];
bool nrq[N],inq[N],ok;
vector< pair<int,int> >v[N];
queue<int>q;
void bellman_ford(int start)
{
q.push(start);
for(int i=1;i<=n;i++)
{
d[i]=INF;
}
d[start]=0;
while(!q.empty())
{
int nod=q.front();
nrq[nod]++;
inq[nod]=false;
if(nrq[nod]==n+1)
{
ok=false;
break;
}
q.pop();
for(auto x:v[nod])
{
int vecin=x.first;
int cost=x.second;
if(inq[vecin]==false)
if(d[vecin]>d[nod]+cost)
{
d[vecin]=d[nod]+cost;
q.push(vecin);
inq[nod]=true;
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>x>>y>>cost;
v[x].push_back(make_pair(y,cost));
}
ok=true;
bellman_ford(1);
if(ok==false)
{
cout<<"Ciclu negativ!";
}
else
for(int i=2;i<=n;i++)
{
cout<<d[i]<<" ";
}
return 0;
}