Pagini recente » Cod sursa (job #3336849) | Cod sursa (job #3346435) | Borderou de evaluare (job #3186657) | Cod sursa (job #3342871) | Cod sursa (job #3326547)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
const int nmax=50000;
const int oo=1e9;
int n,m;
int d[nmax];
bool inq[nmax],negativecycle;
int nrq[nmax];
vector <pair <int,int> > g[nmax];
queue <int> q;
void read(){
fin>>n>>m;
for(int i=1;i<=m;++i){
int x,y,c;
fin>>x>>y>>c;
g[x].push_back(make_pair(y,c));
}
}
void bellmanford(){
for(int i=2;i<=n;i++)
d[i]=oo;
q.push(1);
inq[1]=1;
nrq[1]++;
while(!q.empty() && !negativecycle)
{
int nod=q.front();
q.pop(); inq[nod]=0;
for(int i=0;i<g[nod].size();i++)
{
int vecin=g[nod][i].first;
int cost=g[nod][i].second;
if(d[vecin]>d[nod]+cost)
{
d[vecin]=d[nod]+cost;
if(inq[vecin]==0)
{
q.push(vecin);
inq[vecin]=1;
nrq[vecin]++;
if(nrq[vecin]>n)
negativecycle=1;
}
}
}
}
}
void print(){
if(negativecycle==1)
{
fout<<"Ciclu negativ!\n";
return;
}
for(int i=2;i<=n;++i)
fout<<d[i]<<" ";
fout<<"\n";
}
int main()
{
read();
bellmanford();
print();
return 0;
}