Pagini recente » Cod sursa (job #2175587) | Cod sursa (job #2065074) | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #2596085)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream cin("bellmanford.in");
ofstream cout("bellmanford.out");
queue<pair <int,int>> q;
int n,m,x,y,z,d[50005],viz[50005],nr[50005];
vector<pair <int ,int>> v[250005];
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++){
d[i]=(1<<20);
}
for(int i=1;i<=m;i++){
cin>>x>>y>>z;
v[x].push_back({y,z});
}
d[1]=0;
viz[1]=1;
q.push({0,1});
while(!q.empty()){
int nod=q.front().second;
q.pop();
viz[nod]=0;
if(nr[nod]>=n){
cout<<"Ciclu negativ!";
return 0;
}
for(auto x: v[nod]){
if(d[x.first]>d[nod]+x.second){
d[x.first]=d[nod]+x.second;
if(!viz[x.first]){
q.push({d[x.first],x.first});
nr[x.first]++;
viz[nod]=1;
}
if(nr[x.first]>=n){
cout<<"Ciclu negativ!";
return 0;
}
}
}
}
for(int i=2;i<=n;i++){
cout<<d[i]<<" ";
}
return 0;
}