Pagini recente » Cod sursa (job #968457) | Cod sursa (job #1836462) | Cod sursa (job #2226102) | Cod sursa (job #2592861) | Cod sursa (job #3216225)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
#define N 50005
#define oo 1e9
int n,p,x,y,z;
vector<pair<int,int>> G[N];
bitset<N> viz;
int f[N];
queue<int> q;
int D[N];
void Citire(){
fin>>n>>p;
while(fin>>x>>y>>z){
G[x].push_back(make_pair(y,z));
}
}
bool BellmanFord(int x){
for(int i=1;i<=n;i++){
D[i]=oo;
}
viz[x]=1;
D[x]=0;
q.push(x);
while(!q.empty()){
int k=q.front();
f[k]++;
if(f[k]>=n) return false;
q.pop();
viz[k]=0;
for(auto it=G[k].begin();it!=G[k].end();it++){
int vecin=(*it).first;
int cost=(*it).second;
if(D[k]+cost<D[vecin]){
D[vecin]=D[k]+cost;
if(viz[vecin]==0){
viz[vecin]=1;
q.push(vecin);
}
}
}
}
return true;
}
int main(){
Citire();
if(BellmanFord(1)==false) fout<<"Ciclu negativ!";
else{
for(int i=2;i<=n;i++){
if(D[i]!=oo) fout<<D[i]<<' ';
else fout<<-1<<' ';
}
}
return 0;
}