Pagini recente » Cod sursa (job #1679142) | Cod sursa (job #2913880) | Cod sursa (job #2136724) | Cod sursa (job #1110140) | Cod sursa (job #2626645)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
const int NMAX = 50005;
const int INF = (1<<29);
int n,m,d[NMAX],x,y,cost,cnt[NMAX];
bool in_q[NMAX];
vector < pair<int,int> > v[NMAX];
queue < pair<int,int> > q;
int main()
{
fin >> n >> m;
for(int i=0;i<=n+1;i++) d[i]=INF;
d[1]=0;
for(int i=1;i<=m;i++){
fin >> x >> y >> cost;
v[x].push_back(make_pair(y,cost));
}
q.push({1,0});
while(!q.empty()){
pair<int,int> aux=q.front();
int nod=aux.first;
in_q[nod]=false;
q.pop();
for(int i=0;i<v[nod].size();i++){
int vecin=v[nod][i].first,cost=v[nod][i].second;
if(d[vecin]>d[nod]+cost){
d[vecin]=d[nod]+cost;
cnt[nod]++;
if(cnt[nod]==n){
fout << "Ciclu negativ!";
return 0;
}
if(!in_q[vecin]){
q.push({vecin,d[vecin]});
in_q[vecin]=true;
}
}
}
}
for(int i=2;i<=n;i++) fout << d[i] << ' ';
return 0;
}